【发布时间】:2015-09-16 05:49:49
【问题描述】:
我快哭了,因为我尝试了很多解决方案和主题,但都不起作用。
问题: 我必须将一个字符串(它是一个位图,但我有 base64 编码)上传到我们可爱的服务器,所以我在 Android 中创建了一个后台线程来执行此操作,并调用后端。我收到一条 HTTP 400 错误消息,其中包含以下消息:
org.springframework.web.bind.MissingServletRequestParameterException","message":"Required MultipartFile parameter 'file' is not present","path":"/backend/newimage"}.
我的标题:
Content-Disposition: form-data; name="file"
Content-Type: text/plain; charset=UTF-8
Content-Length: 24069
Content-Transfer-Encoding: binary
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsK.......etc.....binary
我没有在标题中看到以下部分:
enctype:“multipart/form-data”)。 我不明白为什么,我的 retforit interce 看起来像这样:
@POST("/newimage")
@Multipart
String uploadImageToIdea(@Query("id") String id, @Part("file") String file );
我不明白错误信息,因为我这里有文件参数。
我尝试了以下方法(显然没有工作:
- Retrofit Multipart Upload Image failed
- Retrofit - @Body parameters cannot be used with form or multi-part encoding(添加了@Headers,在这种情况下,我的请求之前有更多的标题,但没有改变任何东西。)
我调用后端的代码(不是最终版本,但首先让事情发挥作用:)):
new Thread() {
@Override
public void run() {
MultipartTypedOutput file = new MultipartTypedOutput();
for (int i = 0; i < imagesToUpload.size(); ++i) {
Bitmap imageBitmap = imagesToUpload.get(i);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] byteArray = stream.toByteArray();
String bitmapString = Base64.encodeToString(byteArray, Base64.DEFAULT);
backend.uploadImageToIdea(submitIdeaResponse.getIdeaDetails().getId(), bitmapString);
}
}
}.start();
来自我的后端开发人员的说明:
您需要发送一个多部分请求 (enctype="multipart/form-data")。
那么,有人可以帮助我吗,为什么我有 HTTP 400 和上面的错误消息?我可以在我的代码中进行哪些更改以使此调用正常工作? 谢谢
【问题讨论】:
标签: android file-upload retrofit bad-request