retrofit2上传文件总结

来源:互联网 发布:mac os sierra文件 编辑:程序博客网 时间:2024/06/01 09:41

使用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());
                            }
                        });

0 0
原创粉丝点击