除了网上可查的大多数方式,我提供一个类似于List<File>的方式,服务器端使用MultipartFile[] 是可以正常接收。
参数中直接写 File[] 类型会报错不识别,直接写List<File>也不能用,后续根据提示改为ArrayList<File>,是发送到服务器端了,但服务器端接收报错。
各种尝试后,interface中 需要改成以下方式:
@Multipart
@POST("/upload")
suspend fun uploadFile(@Part file: List<MultipartBody.Part>,
@Part("imei") imei: String,
@Part("ts") ts: Long): BaseResponse
传参时使用以下代码把List<File>转为List<MultipartBody.Part>即可:
private fun convertList(fileList: List<File>): List<MultipartBody.Part> {
return fileList.map { file ->
MultipartBody.Part.createFormData("file", file.name,
file.asRequestBody("application/octet-stream".toMediaTypeOrNull())
)
}
}
使用示例:
// files为List<File>列表
ApiFactory.create<YourService>().uploadFile(convertList(files),"9999999",123456789)
网友评论