Я хочу обслуживать динамический 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)
}