【问题标题】:Google App Engine Blobstore and Restlet - "Must be called from a blob upload callback request"Google App Engine Blobstore 和 Restlet -“必须从 blob 上传回调请求中调用”
【发布时间】:2013-08-04 11:05:14
【问题描述】:

错误

原因: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。

第二。关于这篇文章,有手动编写文件的解决方案:

Google 表示如下:

已弃用:此处用于将文件写入到的文件 API 功能 Blobstore 将在未来某个时间被删除,以支持 将文件写入 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,该 URL 这可以减轻任何潜在的嗅探。

这非常适合渲染 Web 表单的场景 由用户提交。但是,如果你是 试图提供一个允许上传文件的 REST API(想想 例如像 TwitPic 之类的东西)。在这种情况下,你必须写 您自己的渲染模拟 Web 表单将执行的操作(获取 文件,创建随机 POST URL,调用它,...)

问题

在谷歌应用引擎中存储图像的最佳方法是什么?有比 blobstore 更好的方法吗?如何在 blobstore 中存储图像?

【问题讨论】:

  • 您遗漏了一些代码。你在哪里调用 blobstoreService.createUploadUrl(path) 如果你没有调用那个函数,那就是问题所在。
  • @tkaitchuck 我试图在blobstoreService.getUploads 之前调用它。但这并没有改变行为
  • 这个问题你解决了吗?我也有同样的问题=(

标签: java file google-app-engine file-upload blobstore


【解决方案1】:

我认为你最好的也是官方支持的选择是谷歌云存储客户端库,https://developers.google.com/appengine/docs/java/googlecloudstorageclient/ 看起来他们将不再支持以编程方式写入 blobstore,这可能是为了促进云存储在 blobstore 上的使用。图像和 blobstore api 在 GCS 上工作,用于创建和存储 blobstore 密钥以及生成图像 url/调整大小等。

另一种我没有深入研究的非官方方式是复制 Files Api 源并自己维护它,它可能使用不会消失或始终可用但我不知道确切的 rpc 调用。

【讨论】:

  • 抱歉,这不是解决办法。这是另一种技术......那么你也可以建议亚马逊 s3。 Blobstore 更便宜,也足以满足我的工作流程,这就是我想使用它的原因。
  • 这项其他技术实际上与 blobtstores api 和应用程序引擎紧密集成。此外,定价比 s3 和 blobstore 本身便宜,只需通过免费的 5GB 限制,您将支付比 blobstore 和 cloudstorage 更多的费用,并且它具有内置的类似 cdn 的功能,因此它可以自动缓存在边缘服务器上。
猜你喜欢
  • 2016-12-02
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2013-12-16
相关资源
最近更新 更多