Android 使用Retrofit 表单 上传多张图片

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

猜你喜欢

转载自blog.csdn.net/weixin_38687303/article/details/124955600