首先定义一个上传方法:
@Headers(DOMAIN_NAME+ DOMAIN_NAME_testServer)
@Multipart //注意这里的multipart和POST类型
@POST("/internal-api/android/file/upload")
suspend fun uploadFile(@Part fileList: List<MultipartBody.Part>): BaseResponse<List<String>>
注意代码中的multipart注解,要上传多个文件的话就是@Part fileList: List<MultipartBody.Part>
为入参,单个文件就是@Part file: MultipartBody.Part
为入参
准备组成body:
val builder = MultipartBody.Builder().setType(MultipartBody.FORM) //表单类型
// URI列表
picList.forEach {
//使用context获取文件名,可选
val documentFile: DocumentFile =
DocumentFile.fromSingleUri(applicationContext, it)!!
val resolver = applicationContext.contentResolver
resolver.openInputStream(it).use { stream ->
// Perform operations on "stream".
val b = stream!!.readBytes()
val requestFile: RequestBody = b.toRequestBody("image/*".toMediaTypeOrNull(), 0, b.size)
//"fileList"即为要传输的字段名
builder.addFormDataPart("fileList", documentFile.name, requestFile)
}
}
//如果传输多个文件,则直接传入
val parts = builder.build().parts
uploadFile(fileList = parts)
//如果传输单个文件,可以这样
val parts = builder.build().part(0)
uploadFile(fileList = parts)
近期评论