如何从 GAE 下载大 Zip
How to download a large Zip from GAE
我使用了此处建议的方法:
Creating ZIP archives in Google App Engine ( Java)
在这里 How to create a zip archive containing google cloud storage objects within appengine java app?
return 一个 zip 文件,我遇到的问题是响应大于允许的 ~30M。处理它的最佳做法是什么?
最佳方式是保存到存储桶,然后从那里提供。
它还允许您:
- 从 TaskQueue 作业准备文件,该作业不限于 60 秒,因此您可以处理更多数据、处理错误等
- 赋予用户pause/resume下载、使用下载管理器等的能力,w/o强制您的前端每次都从头开始工作
基本上我的建议是:
- 为后端作业
为用户提供TicketId
- 发送任务到任务队列
- 在后端作业中准备数据,上传到存储桶,设置TicketId为done
- 浏览器等待 TicketId 被标记为 done(频道 API 的AJAX)
- 然后一个特殊的 servlet 从 Storage
中提供这个文件
稍后提供此文件有两个选项:
(最优)直接给Storage对象一个link:
- https://storage.googleapis.com/<bucket>/[<对象>]
- https://<bucket>.storage.googleapis.com/[<对象>]
- https://yourdomain.if.set.for.the.bucket/[<object>]
或使用 Blobstore:
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/<bucket>/<object>");
blobstoreService.serve(blobKey, resp); //where resp is your HttpServletResponse
我使用了此处建议的方法:
Creating ZIP archives in Google App Engine ( Java)
在这里 How to create a zip archive containing google cloud storage objects within appengine java app?
return 一个 zip 文件,我遇到的问题是响应大于允许的 ~30M。处理它的最佳做法是什么?
最佳方式是保存到存储桶,然后从那里提供。
它还允许您:
- 从 TaskQueue 作业准备文件,该作业不限于 60 秒,因此您可以处理更多数据、处理错误等
- 赋予用户pause/resume下载、使用下载管理器等的能力,w/o强制您的前端每次都从头开始工作
基本上我的建议是:
- 为后端作业 为用户提供TicketId
- 发送任务到任务队列
- 在后端作业中准备数据,上传到存储桶,设置TicketId为done
- 浏览器等待 TicketId 被标记为 done(频道 API 的AJAX)
- 然后一个特殊的 servlet 从 Storage 中提供这个文件
稍后提供此文件有两个选项:
(最优)直接给Storage对象一个link:
- https://storage.googleapis.com/<bucket>/[<对象>]
- https://<bucket>.storage.googleapis.com/[<对象>]
- https://yourdomain.if.set.for.the.bucket/[<object>]
或使用 Blobstore:
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/<bucket>/<object>");
blobstoreService.serve(blobKey, resp); //where resp is your HttpServletResponse