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