android http通過post上傳檔案和提交參數(通過拼裝協議)

來源:互聯網
上載者:User

HttpURLConnection conn = null;

DataOutputStream outStream = null;
try{
           String BOUNDARY = "---------------------------7da2137580612";    //資料分界線
           
           String MULTIPART_FORM_DATA ="multipart/form-data";
           
           URL url = new URL(Const.URL);
           
               //上傳表單的檔案
               StringBuilder emailSB = new StringBuilder();
               emailSB.append("--");
               emailSB.append(BOUNDARY);
               emailSB.append("\r\n");
               emailSB.append("Content-Disposition:form-data;name=\"email\"\r\n\r\n");
               emailSB.append(email);
               emailSB.append("\r\n");
               
               StringBuilder bitmapSB = new StringBuilder();
               bitmapSB.append("--");
               bitmapSB.append(BOUNDARY);
               bitmapSB.append("\r\n");
               bitmapSB.append("Content-Disposition:form-data;name=\"image\";filename=\"image\"\r\n");
               bitmapSB.append("Content-Type:image/png\r\n\r\n");
               
               byte[] end_data =("--"+BOUNDARY+"--\r\n").getBytes();//資料結束標誌
               
               File file = new File("/mnt/sdcard/111.png");
               FileInputStream fileIS = new FileInputStream(file);
               
               long contentLenght = emailSB.toString().getBytes().length +  end_data.length
               
+ bitmapSB.toString().getBytes().length + file.length() + "\r\n".getBytes().length;
               
               conn = (HttpURLConnection)url.openConnection();
               conn.setDoInput(true);        //允許輸入
               conn.setDoOutput(true);        //允許輸出
               conn.setUseCaches(false);    //不使用caches
               conn.setRequestMethod("POST");
               conn.setRequestProperty("Connection","Keep-Alive");
               conn.setRequestProperty("Content-Type",MULTIPART_FORM_DATA+";boundary="+BOUNDARY);
               conn.setRequestProperty("Content-Length",Long.toString(contentLenght));
               
               
               outStream = new DataOutputStream(conn.getOutputStream());  
               
               outStream.write(emailSB.toString().getBytes());
               
               outStream.write(bitmapSB.toString().getBytes());
               
               byte[] buffer = new byte[1024];
               int len = 0;
               while((len = fileIS.read(buffer)) != -1){
               
outStream.write(buffer, 0, len);
               }
               outStream.write("\r\n".getBytes());
               
               
               outStream.write(end_data);            
               outStream.flush();
               int cah = conn.getResponseCode();
               if(cah!=200){
               
System.out.println("上傳失敗");
               
return;
               }
               InputStream is = conn.getInputStream();
               int ch;
               StringBuilder result = new StringBuilder();
               while((ch=is.read())!=-1){
               
result.append((char)ch);
               }
               System.out.println("result :" + result.toString());
           } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       finally{
       
try {
       
if(outStream != null){
       
outStream.close();
       
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       
if(conn != null){
       
conn.disconnect();
       
conn = null;
       
}

       }

使用HttpUrlConnection類比post表單進行檔案上傳平時很少使用,比較麻煩。

 

原理是: 分析檔案上傳的資料格式,然後根據格式構造相應的發送給伺服器的字串。

格式如下:這裡的httppost123是我自己構造的字串,可以是其他任何的字串

----------httppost123 (\r\n)
Content-Disposition: form-data; name="img"; filename="t.txt" (\r\n)
Content-Type: application/octet-stream (\r\n)

(\r\n)

sdfsdfsdfsdfsdf (\r\n)
----------httppost123 (\r\n)
Content-Disposition: form-data; name="text" (\r\n)

(\r\n)

text tttt (\r\n)
----------httppost123-- (\r\n)
(\r\n)

 

上面的(\r\n)表示各個資料必須以(\r\n)結尾。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.