我在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
进行回复。
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);
@Multipart
@POST("/{path}")
Object uploadImage(@Path(value = "path", encode = false) String uploadPath, @Part("file") TypedOutput image);
答案 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请求。