一次上传文件和发送参数


Uploading file and send parmeters using one post

我已经尝试了一天多的时间来上传文件到服务器,并在同一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);

之后不发送文件,而是发送参数。你可以去掉那句话。