retrofit2上传文件总结

使用Retrofit1.X版本上传文件是这样的:

 public interface ApiManager {
    @Multipart
    @POST("/user/addCarInfo")
    void addCarInfo(@QueryMap Map<String, Object> options, @Part("file") TypedFile file, Callback<JsonElement> response);

}

然而在2.X版本中,TypedFile被隐藏了,所以无法使用,那么可以使用PartMap上传一个或多个文件。

一.上传一个文件

     1.定义接口:

     

    @Multipart
    @POST("vi/read")
    Observable<String> upload(@PartMap Map<String, RequestBody> params);

     2.上传文件:

     

                //上传图片
                Map<String, RequestBody> map = new HashMap<String, RequestBody>();
                //根据文件扩展名获得MimeType
                String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(file.getAbsolutePath()));
                //创建RequestBody
                RequestBody requestBody = RequestBody.create(MediaType.parse(mimeType), file);
                map.put(Constant.UPLOAD_FILE_KEY + file.getName(), requestBody);
                MyLog.d("Image Path : " + file.getAbsolutePath());
                UCService.createUCService().upload(map)
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Action1<String>() {
                            @Override
                            public void call(String response) {
                                MyLog.d("upload image response : " + response);
                                if (!TextUtils.isEmpty(response)) {
                                    handleParseVinResults(response);
                                }
                            }
                        }, new Action1<Throwable>() {
                            @Override
                            public void call(Throwable throwable) {
                                MyLog.d("upload image error : " + throwable.getMessage());
                            }
                        });

二.上传多个文件

         //文件路径
        String path= Environment.getExternalStorageDirectory().getAbsolutePath();
        File file1 = new File(rootPath + "/test1.docx");
        File file2 = new File(rootPath + "/test2.rar");
        //获取文件mimetype
        Map<String, RequestBody> params = new HashMap<>();
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(file1.getPath()));
        String mimeType2 = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(file2.getPath()));
        //创建RequestBody
        RequestBody fileBody1 = RequestBody.create(MediaType.parse(mimeType), file1);
        RequestBody fileBody2 = RequestBody.create(MediaType.parse(mimeType2), file2);
        params.put("file\"; filename=\"" + file1.getName() + "", fileBody1);
        params.put("file\"; filename=\"" + file2.getName() + "", fileBody2);
        //请求
        UCService.createUCService().upload(map)
              .subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(new Action1<String>() {
                            @Override
                            public void call(String response) {
                                MyLog.d("upload image response : " + response);
                                if (!TextUtils.isEmpty(response)) {
                                    handleParseVinResults(response);
                                }
                            }
                        }, new Action1<Throwable>() {
                            @Override
                            public void call(Throwable throwable) {
                                MyLog.d("upload image error : " + throwable.getMessage());
                            }
                        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值