It seemed interesting to me, and only for testing the following occurred to me:
http://play.golang.org/p/JKAde2jbR3
package main import ( "archive/zip" "bytes" "fmt" "io/ioutil" "log" "net/http" ) func zipHandler(w http.ResponseWriter, r *http.Request) { filename := "randomfile.jpg" buf := new(bytes.Buffer) writer := zip.NewWriter(buf) data, err := ioutil.ReadFile(filename) if err != nil { log.Fatal(err) } f, err := writer.Create(filename) if err != nil { log.Fatal(err) } _, err = f.Write([]byte(data)) if err != nil { log.Fatal(err) } err = writer.Close() if err != nil { log.Fatal(err) } w.Header().Set("Content-Type", "application/zip") w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s.zip\"", filename))
I just add some headers like Content-Type and Content-Disposition .
Also, instead of using io.Copy(w, buf) I write w.Write(buf.Bytes()) directly, wondering if this is better? probably a more experienced user can clarify this.
nbari source share