错误
原因:java.lang.IllegalStateException:必须从 blob 上传回调请求中调用。在 com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads(BlobstoreServiceImpl.java:169)
代码
public class UserUploadProfilePictureResource extends ServerResource {
@Post
public void handleBlobstoreUpload(Representation entity) {
Representation rep =null;
if (entity !=null) {
if (MediaType.MULTIPART_FORM_DATA.equals(entity.getMediaType(), true)) {
Request restletRequest = getRequest();
HttpServletRequest servletRequest = ServletUtils.getRequest(restletRequest);
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(servletRequest);
可能的解决方案(但我不想要)
第一的。我不想调用第二个 HttpServlet。
第二。关于这篇文章,有手动编写文件的解决方案:
谷歌说如下:
已弃用:此处用于将文件写入 Blobstore 的 Files API 功能将在未来某个时间被移除,以支持将文件写入 Google Cloud Storage 并使用 Blobstore 提供服务。
可能的解决方案2(但只是一个解决方法的概念)
http://www.cloudave.com/1055/the-new-google-app-engine-blobstore-api-first-thoughts/
Bret Slatkin 指出,当 API 生成用于上传文件的 POST URL 时,它会创建一个唯一的一次性 URL,以减轻任何潜在的嗅探。
这非常适合您呈现要由用户提交的 Web 表单的场景。但是,如果您尝试提供允许上传文件的 REST API(例如 TwitPic 之类的东西),事情就会变得更加困难。在这种情况下,您必须编写自己的渲染器来模拟 Web 表单的功能(获取文件、创建随机 POST URL、调用它……)
问题
在谷歌应用引擎中存储图像的最佳方法是什么?有比 blobstore 更好的方法吗?如何将图像存储在 blobstore 中?