我已经尝试了一天多的时间来上传文件到服务器,并在同一post请求上发送一些变量。我已经上传了一个文件,但是我不能发送变量。我试着像这样添加它们:
dataOutputStreem.write(("username=user1").toBytes("utf-8"));
在我的php脚本中:
$username=$_POST("username") (or _$FILES("username"))
但是我什么也没得到。我真的需要一些帮助,我已经尝试了不同的方法,但都不起作用。谢谢你!下面是完整的代码:
String fileName = files.get(i);
i++;
fileName = fileName.substring(0,fileName.indexOf(" "));
HttpURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "'r'n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
File sourceFile = new File(path + "/" + fileName);
if (!sourceFile.isFile()) {
Log.e("uploadFile", "Source File not exist :"+ path);
} else {
try {
// open a URL connection to the Servlet
FileInputStream fileInputStream = new FileInputStream(
sourceFile);
URL url = new URL(upLoadServerUri);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url
.openConnection();
// conn.setChunkedStreamingMode(1024*1024);
conn.setDoInput(true); // Allow Inputs
conn.setDoOutput(true); // Allow Outputs
conn.setUseCaches(false); // Don't use a
// Cached
// Copy
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection","Keep-Alive");
conn.setRequestProperty("ENCTYPE","multipart/form-data");
conn.setRequestProperty("Content-Type","multipart/form-data;boundary="
+ boundary);
conn.setRequestProperty("uploaded_file",fileName);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary+ lineEnd);
/*here I am trying to send username*/
dos.write(("username=aaaaaaa").getBytes("utf-8"));
dos.flush();
dos.writeBytes(lineEnd);
dos.writeBytes("Content-Disposition: form-data; name='"uploaded_file'";filename='""
+ fileName + "'"" + lineEnd);
dos.writeBytes(lineEnd);
// create a buffer of maximum size
bytesAvailable = fileInputStream
.available();
bufferSize = Math.min(bytesAvailable,
maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0,
bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream
.available();
bufferSize = Math.min(bytesAvailable,
maxBufferSize);
bytesRead = fileInputStream.read(
buffer, 0, bufferSize);
}
// send multipart form data necesssary after
// file
// data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary
+ twoHyphens + lineEnd);
// Responses from the server (code and
// message)
serverResponseCode = conn.getResponseCode();
String serverResponseMessage = conn
.getResponseMessage();
Log.i("uploadFile", "HTTP Response is : "
+ serverResponseMessage + ": "
+ serverResponseCode + " "
+ fileName);
}
和php:
session_start();
$username = $_POST["username"];
$userpass= $_REQUEST["userpass"];
$folder = $_REQUEST["folder"];
if(islogin()==0)
{
$file_path = getcwd()."/".$username."/";
$file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
$newname=$file_path."-uploading";
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path."-uploading")) {
rename($newname,$file_path);
echo "success";
} else{
echo "fail";
}
}
else echo "not log in";
参数必须以这种方式发送:
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name='"user'"" + lineEnd);
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(user + lineEnd);
移动到
conn.setRequestProperty("uploaded_file",fileName);
之后不发送文件,而是发送参数。你可以去掉那句话。