我想提供一个即时创建的.ZIP文件,而不必将其写入磁盘(I/O会降低性能)并通过HTTP将其提供给客户端。创建+服务(通过HTTP).ZIP文件,而不写入磁盘?
这是我第一次尝试这样的:
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)
}
}
这是不行的,因为.ZIP最终被下载后损坏。我想这个问题与io.Copy有关;我应该使用不同的方法吗?
您正在复制zip作家,然后关闭它。 – JimB
@JimB什么是首选?,以'io.Copy(w,buf)'或'w.Write(buf.Bytes())' – nbari
@nbari:因为我们知道'buf'是'bytes.Buffer '所以整个文件已经在一个切片中,我更喜欢第二个,因为我们在技术上不需要Copy调用。在实践中或者没有问题。 – JimB