我最近从使用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);
生成请求的代码如下:
Headers("Content-Type: image/jpeg")
@POST("/thumbnail")
Call<Void> uploadThumbnail(@Body RequestBody thumbnailContent);
但是,似乎Retrofit可能会尝试将RequestBody
解析为JSON对象,因为实际发送到服务器的数据是{}
。
有关如何正确发布二进制数据的任何建议或指导将不胜感激。感谢。
答案 0 :(得分:1)
像这样创建您的请求
Headers("Content-Type: image/jpeg")
@POST("/thumbnail")
@Multipart
Call<Void> uploadThumbnail(@Part RequestBody thumbnailContent);
像这样称呼
File partFile = <your_stream_as_file>;
RequestBody fbody = RequestBody.create(MediaType.parse("image"), partFile);
uploadThumbnail(fbody);