【问题标题】:File upload to AppEngine Blobstore文件上传到 AppEngine Blobstore
【发布时间】:2012-05-06 16:38:17
【问题描述】:

按照blobstore document 了解如何上传到 Blobstore。它展示了通过JSP + Servlet的方式上传。

由于我的应用是基于 GWT 的,所以我需要适配 GWT RPC(而不是 JSP)。

所以在我的应用 RPC 服务实现中:

public class MyServiceImpl extends RemoteServiceServlet implements
    MyService {

  public String getUploadUrl() {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    return blobstoreService.createUploadUrl("/upload")
  }
}

这是正确的方法还是有其他方法可以正确地做到这一点?我还没有尝试过这段代码。

将要上传的二进制文件范围从字节到最大 2MB。

按照blobstore document 了解如何上传到 Blobstore。它展示了通过JSP + Servlet的方式上传。

由于我的应用是基于 GWT 的,所以我需要适配 GWT RPC(而不是 JSP)。

所以在我的应用 RPC 服务实现中:

public class MyServiceImpl extends RemoteServiceServlet implements
    MyService {

  public String getUploadUrl() {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    return blobstoreService.createUploadUrl("/upload")
  }
}

这是正确的方法还是有其他方法可以正确地做到这一点?我还没有尝试过这段代码。

将要上传的二进制文件范围从字节到最大 2MB。

当我尝试这段代码时,这是服务器端控制台日志:

May 07, 2012 6:35:53 AM com.google.appengine.tools.development.LocalResourceFileServlet doGet
WARNING: No file found for: /crossdomain.xml

然后在客户端 GWT.log 上,Rpc 能够生成一个 URL,但是它不起作用:

[INFO] [blobrpc] - Success fetch upload url: http://127.0.0.1:8888/_ah/upload/aglub19hcHBfaWRyGwsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxgDDA

【问题讨论】:

    标签: java google-app-engine gwt


    【解决方案1】:

    createUploadUrl() 创建一个 URL,该 URL 需要一个带有 Content-type 标头 multipart/form-data 的 HTTP POST。

    如果你想使用 GWT-RPC 而不是你需要使用Blobstore FileService API 在服务器端创建文件。

    【讨论】:

    • 我明白了,但是如果我使用 FormElement form = Document.get().createFormElement(); form.setAction(url_from_rpc);这是有效的吗?或者应用程序使用这种方法会遇到一些会话问题?
    • 我设法在 Blobstore FileService API 的帮助下编写了一个工作代码,尽管我需要编写一些方法来处理流文件上传。感谢您的提示。
    • gwtupload 项目对 GAE 有一些服务器端支持,包括流式传输:code.google.com/p/gwtupload/source/browse/…
    【解决方案2】:

    如果我们将文件发布到该 URL,它将保存在 blobstore 中。但是请注意,本地开发 Web 服务器的默认 URL 是 http://127.0.0.1:8888/,而 blobstore 生成的 URL 是 http://:8888/。这将在以后引起问题,因为出于安全原因,Plupload 将无法将文件 POST 到另一个域。这只发生在本地开发服务器上,发布的应用程序只有一个 URL。通过在 Eclipse 中编辑运行配置来修复它,将 -bindAddress 添加到参数中。这将导致本地开发服务器在 http://:8888/ 上托管 Web 应用程序。您可能需要在 GWT 浏览器插件中允许它在此更改后加载应用程序。

    Multiple file upload using GWT and AppEngine Blobstore?

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 2011-12-15
      • 2014-02-05
      • 2011-07-13
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多