retrofit2 文件上传

  • 1.单文件上传 接口声明:
 @Multipart
 @POST("api/Setting/")
 Call<ServerResponse<AvatarBean>> updateAva(
         @Part MultipartBody.Part img
 ); 

文件上传必须加@Multipart注释 参数用@Part注解
接口请求:

RequestBody photoRequestBody =RequestBody.create(MediaType.parse("image/jpg"), imgFile);
MultipartBody.Part part = MultipartBody.Part.createFormData("avatar", imgFile.getName(),
    photoRequestBody);
    mProfileService.updateAva(part).enqueue(new Callback<ServerResponse<AvatarBean>>() {
            @Override
            public void onResponse(@NonNull Call<ServerResponse<AvatarBean>> call, @NonNull Response<ServerResponse<AvatarBean>> response) {
                ///
            }

            @Override
            public void onFailure(@NonNull Call<ServerResponse<AvatarBean>> call, @NonNull Throwable t) {
                ///
            }
        });


    }

MultipartBody.Part.createFormData()的三个参数分别为
上传文件的key,上传文件name,由上传文件生成的RequestBody 注意@Part注解后面不能跟着参数名

  • 2.文件数组上传
    接口定义:
//上传图片到阿里云,通用图片上传接口
    @Multipart
    @POST("api/UploadImage/")
    Call<ServerResponse<List<String>>> uploadImage(
            @Part List<MultipartBody.Part> files
    );

跟单文件上传相似,都要用@Multipart跟@POST注解配合并且参数要用@Part注解
请求调用:

List<MultipartBody.Part> parts = createFileParts(listImagePath);
mJuService.uploadImage(parts).enqueue(new Callback<ServerResponse<List<String>>>() {
         public void onResponse(Call<ServerResponse<List<String>>> call, Response<ServerResponse<List<String>>> response) {
         //响应内容
         }
         @Override
         public void onFailure(@NonNull Call<SimpleServerResponse> call, @NonNull Throwable t) {
         //请求出错的处理
         }      
}
@NonNull
    private List<MultipartBody.Part> createFileParts(@NonNull List<String> listImagePath) {
        List<MultipartBody.Part> parts = new ArrayList<>();
        for (String path : listImagePath) {
            File file = new File(path);
            RequestBody body = RequestBody.create(MediaType.parse("image/" +    path.substring(path.lastIndexOf(".") + 1)), file);
            MultipartBody.Part part = MultipartBody.Part.createFormData("images[]", file.getName(), body);//注意文档上虽然写着key为images但android端必须用images[]作为key才能上传成功多个文件
            parts.add(part);
        }
        return parts;
    }

注:1.如果是多参数单文件上传跟单文件上传类似,加几个参数就可以了

@Multipart
@POST("api/Setting/")
Call<ServerResponse<AvatarBean>> updateAva(
        @Part MultipartBody.Part fiel1,
        @Part MultipartBody.Part fiel2,
        @Part MultipartBody.Part fiel3,
        @Part MultipartBody.Part fiel4
); 
   2.如果需要其他参数跟文件上传就用
@Multipart
    @POST("store/provider/add-comment/")
    Call<SimpleServerResponse> addCompanyCommen(
            @Query("provider_id") String provider_id,//普通参数
            @Part List<MultipartBody.Part> files //文件数组
   );

如果不定参数上传就

    @POST("store/provider/add-comment/")
    Call<SimpleServerResponse> addCompanyCommen(
            @QueryMap Map<String, String> argMap, //普通参数map(键值对为要上传的键值对)
            @Part List<MultipartBody.Part> files //文件数组
    );
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值