怎么改进 data, err := io.ReadAll(file) ctx.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", key)) ctx.Header("Content-Type", "text/csv") //设置为 .csv 格式文件 ctx.Data(http.StatusOK, "text/csv", data)
时间: 2023-07-21 15:59:51 浏览: 177
Go语言中io.Reader和io.Writer的详解与实现
要改进`data, err := io.ReadAll(file)`,你可以使用`io.Copy`函数来避免一次性读取整个文件内容到内存中。下面是一个示例代码:
```go
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
file, err := os.Open("example.csv")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
// 设置 Content-Disposition 和 Content-Type
key := "example.csv"
contentDisposition := fmt.Sprintf("attachment; filename=%s", key)
contentType := "text/csv"
// 设置响应头
w.Header().Set("Content-Disposition", contentDisposition)
w.Header().Set("Content-Type", contentType)
// 将文件内容拷贝到响应体中
_, err = io.Copy(w, file)
if err != nil {
fmt.Println("拷贝文件内容失败:", err)
return
}
}
```
在这个示例中,我们打开了一个名为"example.csv"的文件,并设置了响应头的`Content-Disposition`和`Content-Type`字段。然后,我们使用`io.Copy`函数将文件内容拷贝到响应体中,从而实现将文件作为附件下载。
阅读全文