2015-10-08 30 views
-1

我試圖將圖像和一些文本字段一起發佈到服務器。我遵循以下代碼將文件發佈到服務器,並且它的工作正常。但我無法弄清楚發送文本字段的位置。如何發送正文文本字段以及Android POST多部分表單數據中的文件

public class TaskPostData extends AsyncTask<Void, Void, Void> { 
    private final ProgressDialog dialog = new ProgressDialog(MainActivity.this); 

    protected void onPreExecute() { 
     this.dialog.setMessage("Loading..."); 
     this.dialog.setCancelable(false); 
     this.dialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     HttpURLConnection conn = null; 
     DataOutputStream dos = null; 
     DataInputStream inStream = null; 
     String existingFileName = file_path; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 
     String urlString = "http://my/post/url"; 
     try { 
      InputStream fileInputStream = getContentResolver().openInputStream(selectedImage); 
      URL url = new URL(urlString); 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 
      conn.setUseCaches(false); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
      dos = new DataOutputStream(conn.getOutputStream()); 
      dos.writeBytes(twoHyphens + boundary + lineEnd); 

      dos.writeBytes("Content-Disposition: form-data; name=\"image\";filename=\"" + upload_file_name + "\"" + lineEnd); // uploaded_file_name is the Name of the File to be uploaded 
      dos.writeBytes(lineEnd); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      buffer = new byte[bufferSize]; 
      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); 
      } 
      dos.writeBytes(lineEnd); 
      dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 
      fileInputStream.close(); 
      dos.flush(); 
      dos.close(); 
     } catch (MalformedURLException ex) { 
      Log.e("Debug", "error: " + ex.getMessage(), ex); 
     } catch (IOException ioe) { 
      Log.e("Debug", "error: " + ioe.getMessage(), ioe); 
     } 

     try { 
      inStream = new DataInputStream(conn.getInputStream()); 
      String str; 
      while ((str = inStream.readLine()) != null) { 
       Log.e("Debug", "Server Response " + str); 
       reponse_data = str; 
      } 
      inStream.close(); 
     } catch (IOException ioex) { 
      Log.e("Debug", "error: " + ioex.getMessage(), ioex); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     if (this.dialog.isShowing()) { 
      this.dialog.dismiss(); 
     } 
    } 
} 

+0

一多的每一個部分都在兩個邊界線之間。因此還要添加一個新的Content-Disposition行。 – greenapps

+0

@greenapps:請給出一個小例子代碼。我有18個字段與一個圖像一起發送。 –

+0

試試吧。你在這篇文章中嘗試的節目。 – greenapps

回答

0
private static final String POST_PARAMS = "userName=Pankaj"; 

這裏是如何我想補充

dos.write(POST_PARAMS.getBytes()); 
+0

但是在哪裏添加這些行? –

+0

好問題。 Sanny的解決方案只能在沒有圖像的情況下工作。 – greenapps

相關問題