我快要哭了,因为我尝试了很多解决方案和主题,但不起作用。
问题: 我必须将一个字符串(它是一个位图,但我进行了 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”). and I don`t understand why, my retforit interce looks like this:
@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,在这种情况下,我在请求之前有更多 header ,但没有更改任何内容。)
我的调用后端的代码(不是最终版本,但首先让事情正常工作:)):
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();
我的后端开发人员的注释:
You need to send a multipart request (enctype="multipart/form-data”).
那么,有人可以帮我解决一下,为什么我有 HTTP 400 并显示上述错误消息吗?我可以在代码中更改哪些内容才能使此调用正常工作? 谢谢
最佳答案
您应该使用TypedFile用于以多部分形式发送文件。
@Multipart
@POST("/newimage")
String uploadImageToIdea(@Part("id") TypedString id, @Part("file") TypedFile file);
了解更多信息link .
关于android - 使用 HTTP 400 进行改造和分段图像上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121212/