Blob Store 响应 415 Unsupported Media Type

Blob Store responds with 415 Unsupported Media Type

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

这意味着我无法将 Blob Store 与 JSP 一起使用,如 Google 所述 here as a typical use-case. Instead I upload the image to Blob Store using Retrofit

这是有效的,因为 图像被上传到 Blob Store,但 Blob Store 响应 415 Unsupported Media Type。我还尝试上传其他文件类型并使用 Postman,但 Blob Store 一直响应 415 Unsupported Media Type,即使请求成功。

改造

邮件接收者

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);

邮递员[=3​​1=]

有效,但收到 415 Unsupported Media Type

与上述请求相同,但添加了 Content-Type header。这不起作用(400 Bad Request

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

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

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

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