我最近从使用 Retrofit 1.9 转向使用 Retrofit 2,并且在发布二进制数据时遇到问题。
当我使用 Retrofit 1.9 时,我能够发送一个TypedByteArray包含byte[]数据@Body的请求。最接近的等价物TypedByteArray似乎是RequestBody,我使用如下:
final ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 5, byteOutputStream);
final byte[] thumbnailBytes = byteOutputStream.toByteArray();
final RequestBody thumbnailRequestBody = RequestBody.create(MediaType.parse("image/jpeg"), thumbnailBytes);
Run Code Online (Sandbox Code Playgroud)
生成请求的代码如下:
Headers("Content-Type: image/jpeg")
@POST("/thumbnail")
Call<Void> uploadThumbnail(@Body RequestBody thumbnailContent);
Run Code Online (Sandbox Code Playgroud)
但是,似乎 Retrofit 可能试图将 解析RequestBody为 JSON 对象,因为实际发送到服务器的数据是{}.
任何有关如何正确发布二进制数据的建议或指导将不胜感激。谢谢。
像这样创建您的请求
Headers("Content-Type: image/jpeg")
@POST("/thumbnail")
@Multipart
Call<Void> uploadThumbnail(@Part RequestBody thumbnailContent);
Run Code Online (Sandbox Code Playgroud)
像这样称呼它
File partFile = <your_stream_as_file>;
RequestBody fbody = RequestBody.create(MediaType.parse("image"), partFile);
uploadThumbnail(fbody);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5619 次 |
| 最近记录: |