如何提供Blobstorage图像的大型zip文件?

时间:2013-04-22 12:05:52

标签: google-app-engine go blobstore

我想提供一个动态zip文件,其中包含存储在blobstorage中的多个用户上传图像

我使用以下代码成功完成了它,但是我遇到了一个问题,即Appengine实例被终止,因为它们消耗了太多内存。

是否可以通过将这些zip文件直接流式传输到客户端并且不将它们保存在内存中来提供服务?有另一种解决方案吗?

w.Header().Set("Content-Type", "application/zip")
w.Header().Set("Content-Disposition", "attachment;filename=photos.zip")

writer := zip.NewWriter(w)

defer writer.Close()

for _, key := range l.Files {
    info, err := blobstore.Stat(c, appengine.BlobKey(key))

    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return  
    }

    wr, err := writer.Create(info.Filename)

    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return  
    }

    reader := blobstore.NewReader(c, appengine.BlobKey(key))

    io.Copy(wr, reader)
}   

1 个答案:

答案 0 :(得分:0)

你应该在blobstore中创建zip文件,然后从那里提供它:

通过这种方式,您还可以加快对已创建/存储的相同zip / bundle的后续请求。