Android图片上传有两种方式:

一种是文件流的方式上传,图片转换成二进制上传;

另一种是把图片转成Base64方式上传.

现在我们来说一下文件流上传图片、(图片上传需要一个图片的路径,同时调用本地相册或者拍照可以返回的图片路径)

添加Rxjava+Retrofit2的依赖

    //Rxjava+Retrofit    compile 'com.squareup.retrofit2:retrofit:2.3.0'    compile 'io.reactivex.rxjava2:rxjava:2.1.7'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'    compile 'com.squareup.retrofit2:converter-gson:2.3.0'//gson 解析器

首先创建接口

public interface  ApiService {    @Multipart    @POST("index.php/Home/Service/Complain")    Observable uploadImages(@PartMap() Map map);}

ImageOKteep是你的数据请求下来的javaBean,根据接口文档写下来。

接下来就是上传图片的请求:简单明了

 private void uploadImage2(File file) {        Map map = new HashMap<>();        //"image/png" 是内容类型,后台设置的类型        RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), file);         /*          * 这里重点注意:          * com_img[]里面的值为服务器端需要key   只有这个key 才可以得到对应的文件          * filename是文件的名字,包含后缀名的   比如:abc.png          */        map.put("com_img[]\"; filename=\"" + file.getName(), requestBody);        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(Event.url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .build();        ApiService apiService = retrofit.create(ApiService.class);        Observable meSetIconObservable = apiService.uploadImages(map);        meSetIconObservable.subscribeOn(Schedulers.io())                .unsubscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer() {                    @Override                    public void onSubscribe(@NonNull Disposable d) {                    }                    @Override                    public void onNext(@NonNull ImageOKteep imageOKteep) {                    }                    @Override                    public void onError(@NonNull Throwable e) {                    }                    @Override                    public void onComplete() {                    }                });    }

如果是多张图片

List compressFile是你存放图片文件的集合。

 private void uploadImage2(List compressFile) {        //多张图片        Map map = new HashMap<>();        if (compressFile != null && !compressFile.isEmpty()) {        for (int i = 0; i < compressFile.size(); i++) {            File file = compressFile.get(i);            RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), file);            map.put("com_img[]\"; filename=\"" + file.getName(), requestBody);        }    }        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(Event.url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .build();        ApiService apiService = retrofit.create(ApiService.class);        Observable meSetIconObservable = apiService.uploadImages(map);        meSetIconObservable.subscribeOn(Schedulers.io())                .unsubscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer() {                    @Override                    public void onSubscribe(@NonNull Disposable d) {                    }                    @Override                    public void onNext(@NonNull ImageOKteep imageOKteep) {                    }                    @Override                    public void onError(@NonNull Throwable e) {                    }                    @Override                    public void onComplete() {                    }                });    }

这样就可以上传多图了。

可以结合这位大佬的写的进行参考:https://blog.csdn.net/u010872619/article/details/78860486

更多相关文章

  1. android的文件操作 sdcard和rom
  2. android studio中断开SVN连接,并彻底清理项目中的.svn文件
  3. Android中显示gif动态图片
  4. 第二十篇 Android获取本机图片、音频、视频、文档以及本地文件夹
  5. Android中资源文件用法简单示例
  6. android关于图片缩放
  7. Unity3d导出Android的apk文件时相关问题的解决办法
  8. android编译系统的makefile文件Android.mk写法
  9. android文件系统挂载分析

随机推荐

  1. Android添加依赖recycleview错误
  2. Ionic2 在Android设备上的部署
  3. Android倒计时CountDownTimer小记
  4. [Android]去除程序中广告的好方法:告诉广
  5. Android消息处理机制——AsyncTask 源码
  6. Android基于Cling开发DLNA应用
  7. ListView的优化就这么多了
  8. Android(安卓)判断网络是否可用、网络类
  9. Android取消RecyclerView、ListView、Scr
  10. Android CountDownTimer带有动画的倒计时