從普通Web頁面上傳文件很簡單,只需要在form標簽叫上enctype="multipart/form-data"即可,剩余工作便都交給浏覽器去完成數據收集並發送Http請求。但是如果沒有頁面的話要怎麼上傳文件呢?
由於脫離了浏覽器的環境,我們就要自己去完成數據的收集並發送請求,所以就很麻煩了。
Android使用HttpURLConnection下載圖片 http://www.linuxidc.com/Linux/2014-05/101854.htm
Adroid 4.0 HttpURLConnection拋異常解決方法 http://www.linuxidc.com/Linux/2013-03/81085.htm
node.js+Android(使用HttpURLConnection和HttpClient)實現文件上傳 http://www.linuxidc.com/Linux/2012-02/53532.htm
在Android上用HttpURLConnection獲取網頁內容 http://www.linuxidc.com/Linux/2011-08/41211.htm
首先我們來寫個JSP頁面並看看浏覽器發出的Http請求是什麼樣的
JSP頁面:
<html>
<head>
<meta charset="UTF-8">
<title>TestSubmit</title>
</head>
<body>
<form name="upform" action="upload.do" method="POST" enctype="multipart/form-data">
參數<input type="text" name="username"/><br/>
文件1<input type="file" name="file1"/><br/>
文件2<input type="file" name="file2"/><br/>
<input type="submit" value="Submit" /><br/>
</form>
</body>
</html>
假如我參數寫的內容是hello word,然後二個文件是二個簡單的txt文件,form提交的信息為:
-----------------------------7da2e536604c8
Content-Disposition: form-data; name="username"
hello word
-----------------------------7da2e536604c8
Content-Disposition: form-data; name="file1"; filename="D:/haha.txt"
Content-Type: text/plain
haha
hahaha
-----------------------------7da2e536604c8
Content-Disposition: form-data; name="file2"; filename="D:/huhu.txt"
Content-Type: text/plain
messi
huhu
-----------------------------7da2e536604c8--
研究下規律發現有如下幾點特征:
1. 第一行是“-----------------------------7da2e536604c8”作為分隔符,然後是“/r/n”回車換行符。 這個7da2e536604c8分隔符浏覽器是隨機生成的。
2. 第二行是Content-Disposition: form-data; name="username"。代表form表單的數據域,name對應頁面input標簽的name值。
3. 第三行是“/r/n”回車換行符。
4. 第四行是參數username的值。
5. 第五行是7da2e536604c8分隔符。
6. 從第六行到第十行和從第十二行到第十六行,分別是上傳的兩個文件的數據域。
7. 第十二行是Content-Disposition: form-data; name="file2"; filename="D:/huhu.txt"。name對應頁面input標簽的name值,filename對應要上傳的文件名(包括路徑在內)。
8. 第十三行如果是文件就有Content-Type: text/plain。這裡上傳的是txt文件所以是text/plain,如果上穿的是jpg圖片的話就是image/jpg了,可以自己試試看看。然後就是回車換行符。
9. 第十五、十六行就是文件的內容了。如:
messi
huhu
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-08/104946p2.htm