Blob Store以415 Unsupported Media Type响应

时间:2016-02-16 11:28:29

标签: java rest google-app-engine blobstore postman

我在Google App Engine上运行了一个API,通过邮件接收图像,通过App Engines传入邮件功能。

这意味着我不能将Blob Store与JSP一起使用,因为Google将here描述为典型的用例。相反,我使用Retrofit将图像上传到Blob商店。

这很有效,因为图片会上传到Blob商店,但Blob商店会回复415 Unsupported Media Type 。我还尝试使用Postman上传其他文件类型,但即使成功请求,Blob Store也会继续使用415 Unsupported Media Type进行回复。

改造

MailReceiver

String uploadUrl = BlobstoreServiceFactory.getBlobstoreService()
                  .createUploadUrl("/api/camera/blobstore-response");
uploadUrl = uploadUrl.split("appspot.com/")[1]; // Remove the base URL.


TypedOutput body = new TypedOutput() {
  @Override
  public String fileName() {
    return fileName;
  }

  @Override
  public String mimeType() {
    return "image/jpeg";
  }

  @Override
  public long length() {
    return -1;
  }

  @Override
  public void writeTo(OutputStream outputStream) throws IOException {
    ByteStreams.copy(inputStream, outputStream);
  }
};

blobStoreApiService.uploadImage(uploadUrl, body);

BlobStoreApiService

  @Multipart
  @POST("/{path}")
  Object uploadImage(@Path(value = "path", encode = false) String uploadPath, @Part("file") TypedOutput image);

邮差

工作,但收到415 Unsupported Media Type Working but receives <code>415 Unsupported Media Type</code>

与上述请求相同,但添加了Content-Type标头。这不起作用(400 Bad RequestIdentical to the request above, but added <code>Content-Type</code> header

1 个答案:

答案 0 :(得分:2)

当调用Blob Store以获取应该发出上传请求的URL时,您将回调URL(在本例中为/api/camera/blobstore-response)添加到Blob Store在保存Blob时调用的处理程序。像这样:

String uploadUrl = BlobstoreServiceFactory.getBlobstoreService().createUploadUrl("/api/camera/blobstore-response");

因此,当Blob Store以415 Unsupported Media Type响应时,这实际上是Blob Store从回调处理程序获得的响应,即。调用api/camera/blobstore时Blob Store获得的响应。

解决方案是创建一个返回2XX的处理程序,并将Blob Store指向该端点。此端点必须处理包含多部分表单数据的POST请求。