如何从GAE下载一个大型Zip

时间:2016-06-09 08:45:54

标签: java google-app-engine zip google-cloud-storage large-files

我使用了这里建议的方法: Creating ZIP archives in Google App Engine ( Java)
在这里How to create a zip archive containing google cloud storage objects within appengine java app? 要返回一个zip文件,我遇到的问题是响应大于允许的~30M。处理它的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

最佳方式是保存到存储桶,然后从那里提供服务。

它还允许您:

  • 从TaskQueue作业准备文件,该作业不限于60秒,因此您可以处理更多数据,处理错误等。
  • 让用户能够暂停/恢复下载,使用下载管理器等,无需每次强制您的前端从头开始工作

基本上我建议:

  1. 为用户提供 TicketId 作为后端作业
  2. 将任务发送到TaskQueue
  3. 在此后端作业中准备数据,上传到存储桶,将 TicketId 设置为已完成
  4. 浏览器等待 TicketId 标记为已完成(通道API的AJAX)
  5. 然后一个特殊的servlet从存储
  6. 中提供此文件

    以后有两个选项可以提供此文件:

    (最佳)直接给存储对象提供链接:

    或使用Blobstore:

    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/<bucket>/<object>");
    blobstoreService.serve(blobKey, resp); //where resp is your HttpServletResponse