- 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 //文件数组
);