【发布时间】:2017-12-27 18:16:17
【问题描述】:
我有一个 Api,它要求我先发送文件的大小(以字节为单位),然后再发送实际文件。当我在文件上调用file.length() 以在第一个Api 调用中发送时,它返回1996。
当我将文件打包成RequestBody 时,contentLength() 变为2556。然后服务器拒绝这个,说这些尺寸必须匹配。
这里是创建RequestBody的代码。
val requestBody = RequestBody.create(
MediaType.parse("image/jpeg"),
avatarFile)
-
RequestBody中添加了什么来增加其内容长度? - 我是否应该在第一次通话时发送
RequestBody的大小来解决此问题?
编辑
这是我第一次调用 API 以最初发送尺寸的地方:
return authService.updateAvatar(
AvatarMetadataRequest(
size = avatarFile.length().toInt(),
crc = profileImageProvider.getFile()!!.checksum()!!.toInt()))
当文件实际上传时,这就是我第二次调用它的地方:
val avatarFile = profileImageProvider.getFile()
val requestBody = RequestBody.create(
MediaType.parse("image/jpeg"),
avatarFile)
return authService.uploadAvatar(
id.split("/").last(),
MultipartBody.Part.createFormData("avatar",
profileImageProvider.getFileName(),
requestBody))
事实证明requestBody 的contentLength() 是正确的。因此,Content-Length 必须在调用 MultipartBody.Part.createFormData 时被修改或增加。
【问题讨论】:
-
OkHttp的RequestBody.contentLength()只是 forwards to file.length() 在引擎盖下,所以我很困惑这怎么会发生。 -
如果您可以添加更多代码(例如,您调用 API 以发送文件大小的部分),它可能会有所帮助。
-
@PixelElephant 你是对的。
ResponseBody不是问题。它正在其他地方添加它