0

我有用 GWT 编写并托管在 Google AppEngine/Java 上的应用程序。在此应用程序中,用户可以选择将视频/音频/文本文件上传到服务器。这些文件可能很大,高达 1gb 左右,因为 GAE/J 不支持大文件,我必须使用另一台服务器来存储这些文件。如果浏览器中没有跨域安全功能,这将很容易实现。所以,我在想的是让 GAE 服务器与我的服务器(Glassfish 或任何其他 java 服务器,如果需要)交谈,告诉文件的 url,如果可能的话,发送上传文件的状态(上传了多少百分比),这样我就可以在客户端屏幕上显示状态。这就是我想做的事情。

当用户加载存储在 GAE/J 上的 GWT 页面时,他/她会将文件上传到我的服务器,然后我的服务器将响应发送回 GAE,GAE 将响应发送给客户端。如果这种情况是可能的,那么实现 GAE 到 Glassfish 对话的最佳方式是什么?

4

3 回答 3

1

实际上在此之前,也许您可​​以尝试通过使用 iframe 绕过浏览器的跨域安全性来使用第一种方法。有一些现成的组件可以用于此,但对于您的问题,我不知道其中哪些可以使用。只是谷歌这些组件...

于 2009-07-20T05:12:56.233 回答
0

一种选择是等待 - blobstore 限制并不总是 50MB!

但是,如果您赶时间,我建议您采用以下方法:

  1. 让您的 App Engine 应用程序生成一个签名令牌,该令牌表示用户有权上传文件。令牌应包括当前日期和时间、用户的用户 ID、最大文件大小和任何其他相关信息,并应使用 HMAC-SHA1 和您的 App Engine 应用和服务器都知道的密钥进行签名。
  2. 将表单返回给用户,该表单 POST 到您的 Blob 托管服务器上的 URL,并嵌入您在步骤 1 中生成的令牌。如果您需要进度通知,您可以使用plupload之类的工具,并在 IFrame 中提供表单您的上传服务器。
  3. 当用户将文件上传到您的服务器时,服务器应将重定向返回给您的 App Engine 应用,并在重定向 URL 中嵌入一个新令牌。该令牌再次使用公共秘密签名,包含新上传文件的 ID。
  4. 当您的 App Engine 应用收到对重定向 URL 的请求时,它知道上传已完成,并且可以在数据存储区中记录新文件的 ID 等。

或者,您可以使用Amazon 的 S3,它已经通过其HTML 表单支持支持所有这些。

于 2010-04-26T09:19:17.880 回答
0

以您建议使用URL Fetch Service的原始方式 执行此操作 以另一种方式执行此操作的缺点是您在网页中引入了对多个站点的依赖关系。
使用 URL Fetch Service 的缺点是您必须在达到免费配额后按传输的字节数付费。

于 2010-04-24T17:14:39.780 回答