Ben diske yazmak zorunda kalmadan (I/O performans yavaşlatır) ve HTTP üzerinden istemciye sunmak, anında oluşturulan bir .ZIP dosya sunmak istiyorum. .ZIP indirdikten sonra bozuk olmak biter gibi bu hiç iyi değilDiske yazmadan + Hizmet (HTTP üzerinden) bir .ZIP dosyası oluşturun?
func ZipServe(W http.ResponseWriter, R *http.Request) {
buf := new(bytes.Buffer)
writer := zip.NewWriter(buf)
// for the sake of this demonstration, this is the data I will zip
data := ioutil.ReadFile("randomfile.jpg")
f, err := writer.Create("randomfile.jpg")
if err != nil {
fmt.Println(err)
}
_, err = f.Write(data)
if err != nil {
fmt.Println(err)
}
io.Copy(W, buf)
err := writer.Close()
if err != nil {
fmt.Println(err)
}
}
: Burada
Öncelikle bu teşebbüs nasıl. Sanırım sorun io.Copy ile ilgisi var; Farklı bir yöntem mi kullanmalıyım?
Kapatmadan önce zip yazarını kopyalıyorsunuz. – JimB
@JimB tercih edilen nedir ?, io.Copy (w, buf) 'veya' w.Write (buf.Bytes()) ' – nbari
@nbari: Bildiğimiz günden beri buf' bir bytes.Buffer 'tüm dosya zaten bir dilim içinde, teknik olarak Copy çağrısına gerek duymadığımızdan ikincisini tercih ederim. Pratikte ya iyi. – JimB