Retrofit上传单图、多图、图文

上传单图

以上传头像为例

@Multipart
@POST(URLConstants.uploadAvatar)
Call<ResponseBody> uploadAvatar(@Part MultipartBody.Part imgs);
private void uploadAvatar(String path) {
        File file = new File(path);
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
        RetrofitUtils.getService().uploadAvatar(part).enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                if (response.isSuccessful()) {
                    
                } else {
                    
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                
            }
        });
    }

多图和文字参数一起上传

以意见反馈页面为例

@Multipart
@POST(URLConstants.feedBack)
Call<ResponseBody> feedBack(@Part("Content") String Content,@Part("ContactInformation")String conInfo,
                                @Part() List<MultipartBody.Part> parts);

content --反馈的内容
conInfo--联系方式
具体参数由实际来定
List<MultipartBody.Part> parts--图片列表

List<MultipartBody.Part> parts = new ArrayList<>();
                for (int i = 0; i < selImageList.size(); i++) {
                    //这里采用的Compressor图片压缩
                    File file = new Compressor.Builder(FeedBackActivity.this)
                            .setMaxWidth(720)
                            .setMaxHeight(1080)
                            .setQuality(80)
                            .setCompressFormat(Bitmap.CompressFormat.JPEG)
                            .setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory(
                                    Environment.DIRECTORY_PICTURES).getAbsolutePath())
                            .build()
                            .compressToFile(new File(selImageList.get(i).path));
                    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
                    MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
                    parts.add(part);
                }
                RetrofitUtils.getService().feedBack(etFeedBack.getText().toString(),etContact.getText().toString(),parts).enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                        if (response.isSuccessful()) {
                           
                        } else {
                            
                        }
                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {
                        
                    }
                });

以下是上传图文的一个坑

@Multipart
@POST(URLConstants.feedBack)
Call<ResponseBody> feedBack(@Part("Content") String Content,@Part("ContactInformation")String conInfo,
                                @Part() List<MultipartBody.Part> parts);

如上,Content 和 conInfo 以String上传的话,服务端接收到的参数会带双引号

解决办法:用RequestBody上传

@Multipart
@POST(URLConstants.feedBack)
Call<ResponseBody> feedBack(@Part("Content") RequestBody Content,@Part("ContactInformation")RequestBody conInfo,
                                @Part() List<MultipartBody.Part> parts);

String转RequestBody方法:

public RequestBody toRequestBody(String value) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), value);
        return requestBody;
    }

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,现在已...
    Android开发__落岑阅读 1,824评论 0 2
  • 整体Retrofit内容如下: 1、Retrofit解析1之前哨站——理解RESTful2、Retrofit解析2...
    隔壁老李头阅读 15,157评论 4 39
  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 670评论 0 0
  • 前言 Retrofit 是 square 公司开源的一个非常著名的简化网络请求的框架,但是它不是网络框架,OkHt...
    DanieX阅读 705评论 0 0