gpt4 book ai didi

go - 下载 excelize xlsx 文件已损坏

转载 作者:IT王子 更新时间:2023-10-29 02:10:22 24 4
gpt4 key购买 nike

我正在使用 Excelize用于生成 xlsx 文档的库。当我使用它的 Write(io.writer) 函数将 xlsx 保存到文件时,它工作得很好。但是我需要在网络服务器上生成并提供这个文件。我正在尝试这个解决方案

func GetConsolidatedReport(w http.ResponseWriter, r *http.Request) {
var reportFile *excelize.File

...

var b bytes.Buffer
writr := bufio.NewWriter(&b)
reportFile.SaveAs("/tmp/testfile.xlsx")
reportFile.Write(writr)
writr.Flush()

fileContents := b.Bytes()
fileSize := strconv.Itoa(len(fileContents))

w.Header().Set("Content-Disposition", "attachment; filename=report.xlsx")
w.Header().Set("Content-Type", "application/octet-stream")
w.Header().Set("Content-Length", fileSize)

t := bytes.NewReader(b.Bytes())
io.Copy(w, t)
}

然后我从网络服务器得到了损坏的 zip 文件,但正常文件保存在“/tmp/testfile.xlsx”中

我已经尝试将内容类型设置为 application/zipapplication/octet-streamapplication/vnd.* 但没有成功.

你能帮帮我吗?提前谢谢你。

PS:服务是指即时生成文件,如有任何误解,敬请谅解。

PS2:似乎我得到了下载文件的开销(8085 字节的原始文件和 13000+ 的下载文件),我无法弄清楚这些开销是从哪里来的。

最佳答案

为了服务于读者,您应该考虑 http.ServeContent。它将为您处理标题、内容范围等。将 io.Copy 行更改为 http.ServeContent(w,r,"testfile.xlsx",time.Now(),t) 它将起作用。文件:https://golang.org/pkg/net/http/#ServeContent

关于go - 下载 excelize xlsx 文件已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com