上传文件到AppEngine Blobstore

3

根据这个Blobstore文档介绍如何上传到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文档,了解如何通过JSP+Servlet方法上传到Blobstore。
由于我的应用程序基于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()方法可以生成一个URL,但是它不能正常工作:

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

2

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); 这种方式,这样做是有效的吗?还是应用会出现一些Session问题? - quarks
我借助Blobstore FileService API成功编写了可工作的代码,但我需要编写一些处理流式文件上传的方法。感谢您的提示。 - quarks
gwtupload项目包括一些针对GAE的服务器端支持,其中包括流处理:http://code.google.com/p/gwtupload/source/browse/#svn%2Ftrunk%2FGwtUpload%2Fgae%2Fsrc%2Fmain%2Fjava%2Fgwtupload%2Fserver%2Fgae - Peter Knego

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

使用GWT和AppEngine Blobstore上传多个文件?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接