您的位置:首页 > 移动开发 > Android开发

野人学Android第二弹——多张图片批量上传

2015-12-12 12:32 274 查看
在上一篇博文中,跟大家介绍了单张图片的上传方法。想必大家觉得不过瘾,如果我有很多照片需要上传怎么办?总不能循环调用单张图片上传的方法吧?不过,一开始我没有思路的时候,还真循环调用过,只不过效率太低就放弃了。那么,如何在单张图片上传的基础上进行多张图片批量上传呢?
在单张照片上传的基础上,只要修改HTTP请求中“上传数据的信息”即可。

DataOutputStream out = new DataOutputStream(conn.getOutputStream());
for(int i=0;i<2;i++){
out.writeBytes(prefix+boundary+end);
out.writeBytes("Content-Disposition:form-data;"+"name=\"upfile"+i+"\";filename=\""+"workupload55555.jpg"+"\""+end);
out.writeBytes("Content-Type: image/jpg" + end);
out.writeBytes(end);
FileInputStream fis = new FileInputStream(new File(fileName));
byte[] b = new byte[1024*4];
int len;
while((len=fis.read(b))!=-1){
out.write(b,0,len);
}
out.writeBytes(end);
Log.i("info", out.toString());
}
out.writeBytes(prefix+boundary+prefix+end);
out.flush();


代码中的for循环就是多张照片上传的关键所在,你想要几张就几张。在服务器端,我依然遍历下$_FILES,看下能得到些什么。这里就不展示了,自己去尝试。我就这样去测试,当照片的数量不大的时候,没有出现什么问题,但是一旦照片的大小超过一定数量(基于Android的机制,有内存大小的限制,至于多少我忘了),就会报错。
这时候,我们要使用Android的一个分块协议了,代码如下:

conn.setChunkedStreamingMode(0);//分块协议


将上面的代码添加到HTTP请求的基础信息中,就可以了。
下面来探究下这个方法到底是什么意思。



大概意思讲的是,当上传的数据流比较大的时候,会消耗内存。这个方法将数据流切分成小块时,但会增加数据流的长度。也就是说,这个方法会将大数据流切分成很多的小块数据流,这样在不影响内存的前提下,将大数据上传,就不会报错了。

写在最后:

我并没有将源代码一字不差的告诉大家,而是将其中的逻辑关系跟大家分享下。通过自己思考过的知识远比直接喂给你更有价值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: