Android 使用Retrofit 表单 上传多张图片
1.ApiService接口声明方法
1.1 headers 里面可以添加业务自己的header参数
@Multipart
@POST("api/uploadPic")
fun uploadFiles(
@HeaderMap headers: HashMap<String, String?>
@Part parts: List<MultipartBody.Part>
): Call<UploadResponse>
1.2 创建retrofit,发起请求
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http:xxx")
.addConverterFactory(GsonConverterFactory.create())
.build();
服务端要求数组的方式把文件放到body里面,key是files。value文件数组。
val service = retrofit.create(ApiService::class.java)
val body = Utils.picToRequestBody("files",list)
val headers = getCommonParams()
service.uploadFiles(headers, body).enqueue(object : Callback<UploadResponse> {
override fun onResponse(
call: Call<UploadResponse>,
response: Response<UploadResponse>
) {
}
override fun onFailure(call: Call<UploadResponse>, t: Throwable) {
}
})
1.3 工具类
fun picToRequestBody(name: String, images: MutableList<Image>): List<MultipartBody.Part> {
val parts = arrayListOf<MultipartBody.Part>()
//多个图片文件
for (image in images) {
val file = File(image.path)
val requestBody = RequestBody.create(MediaType.parse("*/*"), file)
val part =
MultipartBody.Part.createFormData(name, file.name, requestBody)
parts.add(part)
}
return parts
}
结果上传成功
参考文章:
https://wenku.baidu.com/view/c571691264ec102de2bd960590c69ec3d5bbdb05.html