从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求。但是如果没有页面的话要怎么上传文件呢?
由于脱离了浏览器的环境,我们就要自己去完成数据的收集并发送请求,所以就很麻烦了。
Android使用HttpURLConnection下载图片
Adroid 4.0 HttpURLConnection抛异常解决方法
node.js+Android(使用HttpURLConnection和HttpClient)实现文件上传
在Android上用HttpURLConnection获取网页内容
首先我们来写个JSP页面并看看浏览器发出的Http请求是什么样的
JSP页面:
<html>
<head>
<meta charset="UTF-8">
<title>TestSubmit</title>
</head>
<body>
<form action="upload.do" method="POST" enctype="multipart/form-data">
参数<input type="text"/><br/>
文件1<input type="file"/><br/>
文件2<input type="file"/><br/>
<input type="submit" value="Submit" /><br/>
</form>
</body>
</html>
假如我参数写的内容是hello word,然后二个文件是二个简单的txt文件,form提交的信息为:
-----------------------------7da2e536604c8
Content-Disposition: form-data;
hello word
-----------------------------7da2e536604c8
Content-Disposition: form-data;; filename="D:/haha.txt"
Content-Type: text/plain
haha
hahaha
-----------------------------7da2e536604c8
Content-Disposition: form-data;; filename="D:/huhu.txt"
Content-Type: text/plain
messi
huhu
-----------------------------7da2e536604c8--
研究下规律发现有如下几点特征:
1. 第一行是“-----------------------------7da2e536604c8”作为分隔符,然后是“/r/n”回车换行符。 这个7da2e536604c8分隔符浏览器是随机生成的。
2. 第二行是Content-Disposition: form-data;。代表form表单的数据域,name对应页面input标签的name值。
3. 第三行是“/r/n”回车换行符。
4. 第四行是参数username的值。
5. 第五行是7da2e536604c8分隔符。
6. 从第六行到第十行和从第十二行到第十六行,分别是上传的两个文件的数据域。
7. 第十二行是Content-Disposition: form-data;; filename="D:/huhu.txt"。name对应页面input标签的name值,filename对应要上传的文件名(包括路径在内)。
8. 第十三行如果是文件就有Content-Type: text/plain。这里上传的是txt文件所以是text/plain,如果上穿的是jpg图片的话就是image/jpg了,可以自己试试看看。然后就是回车换行符。
9. 第十五、十六行就是文件的内容了。如: