野人学Android第二弹——多张图片批量上传
2015-12-12 12:32
274 查看
在上一篇博文中,跟大家介绍了单张图片的上传方法。想必大家觉得不过瘾,如果我有很多照片需要上传怎么办?总不能循环调用单张图片上传的方法吧?不过,一开始我没有思路的时候,还真循环调用过,只不过效率太低就放弃了。那么,如何在单张图片上传的基础上进行多张图片批量上传呢?
在单张照片上传的基础上,只要修改HTTP请求中“上传数据的信息”即可。
代码中的for循环就是多张照片上传的关键所在,你想要几张就几张。在服务器端,我依然遍历下$_FILES,看下能得到些什么。这里就不展示了,自己去尝试。我就这样去测试,当照片的数量不大的时候,没有出现什么问题,但是一旦照片的大小超过一定数量(基于Android的机制,有内存大小的限制,至于多少我忘了),就会报错。
这时候,我们要使用Android的一个分块协议了,代码如下:
将上面的代码添加到HTTP请求的基础信息中,就可以了。
下面来探究下这个方法到底是什么意思。
大概意思讲的是,当上传的数据流比较大的时候,会消耗内存。这个方法将数据流切分成小块时,但会增加数据流的长度。也就是说,这个方法会将大数据流切分成很多的小块数据流,这样在不影响内存的前提下,将大数据上传,就不会报错了。
写在最后:
我并没有将源代码一字不差的告诉大家,而是将其中的逻辑关系跟大家分享下。通过自己思考过的知识远比直接喂给你更有价值。
在单张照片上传的基础上,只要修改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请求的基础信息中,就可以了。
下面来探究下这个方法到底是什么意思。
大概意思讲的是,当上传的数据流比较大的时候,会消耗内存。这个方法将数据流切分成小块时,但会增加数据流的长度。也就是说,这个方法会将大数据流切分成很多的小块数据流,这样在不影响内存的前提下,将大数据上传,就不会报错了。
写在最后:
我并没有将源代码一字不差的告诉大家,而是将其中的逻辑关系跟大家分享下。通过自己思考过的知识远比直接喂给你更有价值。
相关文章推荐
- android Google推荐的容器SparseArrayCompat简介
- android Google推荐的容器SparseArrayCompat简介
- Android应用读取Excel文件的方法
- Android 从硬件到应用程序:一步一步爬上去 5 -- 在Frameworks蒂姆层硬件服务
- Android Studio 快捷键
- 优酷Android 4.5客户端升级漏洞
- Android编程实现换肤功能实例
- Android之AlertDialog自定义对话框
- 彻底理解android中的内部存储与外部存储
- android中sharedPreferences的用法与json和数组的互转
- Android实现换肤的两种思路分析
- Android中Preference的使用以及监听事件分析
- [Android实例] BLE总结
- Android中的ListView初步接触(一)
- android解决相机拍照照片被旋转的问题
- MPAndroidChart 教程:概述
- 第三方开源Android TickPlusDrawable状态可以通过动画切换的按钮
- Android自定义属性以及组合View
- Android编程实现将应用强制安装到手机内存的方法
- 【Android高级】高斯模糊效果从319ms到3ms的优化实现