Google App Engine大文件上传

时间:2009-05-09 00:58:01

标签: google-app-engine gwt upload

我正在尝试将数据上传到Google App Engine(使用GWT)。我正在使用FileUploader小部件,servlet使用InputStream来读取数据并直接插入数据存储区。在本地运行,我可以成功上传大文件,但是当我将它部署到GAE时,我受限于30秒的请求时间。有没有办法解决?或者有什么方法可以将文件拆分成更小的块并发送更小的块?

7 个答案:

答案 0 :(得分:8)

目前,GAE对文件上传(和响应大小)施加了10 MB的限制,对许多其他内容施加了1 MB的限制;所以,即使你的网络连接速度足够快,在30秒的时间内可以超过10 MB,这也无济于事。谷歌已经说过(我听说Guido van Rossum昨天在Pycon Italia Tre上提到它),它计划在未来克服这些限制(至少对于GAE的用户而言,它们按使用价格超过配额 - 不确定是否计划扩展到未付费的GAE用户,通常需要接受较小的配额才能免费使用GAE。

答案 1 :(得分:8)

使用BlobStore,您有一个1 GB size limit和一个special handler, called unsurprisingly BlobstoreUpload Handler不应该在上传时出现超时问题。

还可以查看http://demofileuploadgae.appspot.com/sourcecodesource answer),这完全符合您的要求。

另外,请查看剩下的GWT-Examples

答案 2 :(得分:1)

你需要上传到另一台服务器 - 我相信30秒的超时无法解决。如果有办法,请指正!我很想知道怎么做!

答案 3 :(得分:1)

30秒响应时间限制仅适用于代码执行。因此,将实际文件作为请求正文的一部分上传。只有在客户端将请求完全发送到服务器后,计时器才会启动,并且您的代码开始处理提交的请求。因此,客户端的连接速度并不重要。

Uploading file on Google App Engine using Datastore and 30 sec response time limitation

答案 4 :(得分:0)

最接近的是将它存储在GAE中时将其拆分为块,然后在下载时,通过发出单独的AJAX请求将其拼凑在一起。

答案 5 :(得分:0)

我同意将数据分块到较小的Blob并且有两个表,一个包含元数据(文件名,大小,下载数量等等)和其他包含块,这些块与元数据表相关联外键,我认为这是可行的......

或者当你上传所有的块时,你可以简单地将它们放在一个有一个表的blob中。

但问题是,您需要一个胖客户端来提供分块数据,比如Java Applet,需要您的客户签名和信任,以便它可以访问本地文件系统

答案 6 :(得分:0)

如果您的请求时间不足,那么您几乎无法做到。也许你的文件太大了,你需要在客户端上使用它们(比如Flash或Java或像pupload这样的上传框架)。

将文件送到应用程序后,还有另一个问题 - 数据存储限制。这里有两个选项:

  • 您可以使用具有相当不错的API的BlobStore服务来处理50兆字节的大型上传

  • 您可以使用类似bigblobae的内容,它可以在常规的appengine数据存储区中存储几乎无限大小的blob。