Android 多文件上传
来源:互联网 发布:下载淘宝网到电脑桌面 编辑:程序博客网 时间:2024/04/30 11:20
上次在论坛里面回答过一个关于多文件上传的问题,然后就有好多同学私信问我具体的实现方式。由于人有点多并且工作有点忙,顾不上及时的回复大家,我在这里先说声抱歉了。
下面我把这块儿整理了一下,供大家参考。
前提
考虑到项目的单一性和安全稳定性,我在项目中用到的是鸿洋大神封装的OkHttpUtils。大家有不明白的可以先去看看http://blog.csdn.net/lmj623565791/article/details/49734867
在大神的Utils中也有关于文件上传的封装,但是需要你一个一个的添加,大家可以看一下:
OkHttpUtils.post()// .addFile("mFile", "messenger_01.png", file)// .addFile("mFile", "test1.txt", file2)// .url(url) .params(params)// .headers(headers)// .build()// .execute(new MyStringCallback());
但是,在我们的项目中很多时候是不知道要具体上传几个文件的,比如说微信的朋友圈,用户可以上传1张照片,也可以上传9张,如果你针对这九中情况分别做封装的话,那我也不好说什么。但是为了省劲我做了如下的封装,目的就是,不管用户添加几张照片,我都放到一个list里面,有多少上传多少。
在鸿洋大神的基础上做一个简单封装
首先我们创建一个MyOkhttpUtils继承大神的OkHttpUtils类,并重写post方法。至于为什么后面会提到。下面看我封装的:
public class MyOkHttpUtils extends OkHttpUtils { public MyOkHttpUtils(OkHttpClient okHttpClient) { super(okHttpClient); } public static MyPostFromBuilder post() { return new MyPostFromBuilder(); }}这里面的这个MyPostFromBuilder是什么鬼呢?这就是重点部分了,因为在大神的封装中关于上传的addFile()方法是在PostFromBuilder中的,它长这样:
public PostFormBuilder addFile(String name, String filename, File file) { files.add(new FileInput(name, filename, file)); return this; }
大家可以看到,他这个方法添加的单个文件,那么我们要做的就是重写它,让他去加载一个list.。下面我们写一个自己的MyPostFromBuilder并继承PostFromBuilder,并重写addFile()方法,除了重写它以外,还需要重写build(),必须的,这个一定要记住,否则在你调用的时候,调用的就是父类的build了,这样你重写addFile就不起作用了。
public class MyPostFromBuilder extends PostFormBuilder { private List<PostFormBuilder.FileInput> files = new ArrayList<>(); public MyPostFromBuilder addFile(List<String> imgList) { for (int i = 0;i <imgList.size();i++){ File file = new File(PhotoBitmapUtils.savePhotoToSD( PhotoBitmapUtils.getCompressPhoto(imgList.get(i),true), MyApplication.getContext())); if (file.exists()) { files.add(new PostFormBuilder.FileInput("img"+i, "feedback" + i+".png", file)); } } return this; } @Override public RequestCall build() { return new PostFormRequest(url, tag, params, headers, files,id).build(); }}
好了,基本到这里就结束了。上面在重写MyOkHttpUtils的时候说过,我们重写了post方法,因为父类中返回的是PostFromBuilder,那就不符合我们的要求了对吧。
用法
好了,大神的封装使用方法我就不说了,下面看下我们的使用方法:
public void upDate(String version, String device, String content, List<String> imgList, OnRequestListener onRequestListener) { String url = Utils.getSignUrl(MyURL.FEEDBACK); MyOkHttpUtils.post() .addFile(imgList) .url(url) .addParams("version",version) .addParams("device",device) .addParams("content",content) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { LogUtil.d("farley", "upDate.onError" + e.toString()); } @Override public void onResponse(String response, int id) { LogUtil.d("farley", "upDate.success" + response); } }); }
url 是我要提交的地址
imgList里面就是我要上传的图片地址,并且在这个方法里面,我们还可以上传其他参数,非常适合在朋友圈这种场景下使用。
结语
对于那些私信我的同学说声抱歉,真的是年底太忙了,简单回复吧,你们说我说的不清楚,但是确实是抽不出更多的时间去细说。今天记录下来,供大家参考吧。
对了说一下我为什么不用XUTILS了,因为xutils里面封装的东西太多了,有加载图片的,有访问网络的,有数据库等等,有的真的是用不到,或者性能不如其他,比如说加载图片我个人认为就不如Glide,所以我就抛弃他了,如果同学觉得,有需要说明一下xutils的多文件上传的话,也可以留言告诉我,我抽时间也写写
1 0
- Android 多文件上传
- Android多文件上传
- android多文件上传
- Android 多文件上传
- android 多文件上传封装
- Android客户端多文件上传
- Android文件上传,支持多文件同时上传
- android 多文件上传注意的问题
- Android基于http协议多文件上传
- android上传单个或多个文件
- Android 一个参数多个文件上传
- Android使用AsyncHttpClient上传多个文件
- android http上传文件
- Android 上传大文件
- Android 上传大文件
- android 文件上传
- android 上传文件类
- android上传文件
- seq 命令
- 单个数码管
- 2017/1/19
- 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
- vs环境配置属性介绍
- Android 多文件上传
- ganglia监控的数据 rrd数据文件
- 程序
- poj 1069 深搜+建坐标系
- 微信小程序---第一天
- 【基础算法】M叉树的遍历问题(BZOJ1185)
- 在Ubuntu 14.10下安装Lua 5.2出错的解决
- 线性表——顺序实现java
- Hadoop那些事儿(二)---MapReduce开发环境搭建