Android使用HttpURLConnection对Php服务器进行通信

时间:2014-10-29 12:32:29

标签: java php android httpurlconnection multipartform-data

我的项目是上传带有一些参数的图像,音频文件(如描述和日期)。

虽然Google宣布使用HttpURLConnection而不是httpclient。我正在使用HttpURLConnection。

我有一个代码可以将图像和音频上传到服务器文件夹中。

但我发送的描述未在服务器中收到。

像Stackover流程中的许多问题一样。但我没有得到确切的解决方案。

我的Android代码是:

                FileInputStream fileInputStream = new FileInputStream(sourceFile_image);
                URL url = new URL(upLoadServerUri);
                conn = (HttpURLConnection) url.openConnection();
                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);

                //adding parameter 

                String description = ""+"Desceiption about the image";

                // Send parameter #name
                dos.writeBytes("Content-Disposition: form-data; name=\"description\"" + lineEnd);
                dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
                dos.writeBytes("Content-Length: " + description.length() + lineEnd);
                dos.writeBytes(lineEnd);
                dos.writeBytes(description + lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);

                // Send #image

                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);

和Php代码:

$description= $_POST['description'];

   $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
   if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
       echo "success";
   } else{
       echo "fail";
   }

图像和音频更新成功。

但参数未收到或我不知道如何在php中接收参数。

我的android和php代码发送和接收参数是否正确?

是否有其他解决方案。

我很努力,但没有工作,也没有想法。

2 个答案:

答案 0 :(得分:0)

// Send parameter #name
dos.writeBytes("Content-Disposition: form-data; name=\"name\"" + lineEnd);

应该是:

// Send parameter #description
dos.writeBytes("Content-Disposition: form-data; name=\"description\"" + lineEnd);

答案 1 :(得分:0)

检查此link

Android代码:

String description = ""+"Desceiption about the image";


            dos.writeBytes("Content-Disposition: form-data; name=\"description\"" + lineEnd); 
            //dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
            //dos.writeBytes("Content-Length: " + description.length() + lineEnd);
            dos.writeBytes(lineEnd);
            dos.writeBytes(description); // mobile_no is String variable
            dos.writeBytes(lineEnd);

Php代码:

$description =$_POST['description'];