1

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

我使用以下代码成功完成了此操作,但遇到了 Appengine 实例因消耗过多内存而被终止的问题。

是否可以通过将此类 zip 文件直接流式传输到客户端而不将它们保存在内存中来提供此类 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)
}   
4

1 回答 1

0

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

这样,您还可以加快对相同 zip/bundle 的后续请求,因为您已经创建/存储了它。

于 2013-04-22T13:50:44.463 回答