登录
首页 >  Golang >  Go问答

如何处理Go中的CSV文件?

来源:stackoverflow

时间:2024-03-25 08:00:40 447浏览 收藏

在 Go 中处理 CSV 文件时,可以通过添加 "Content-Disposition" 标头来提示浏览器下载 CSV 文件。将 CSV 文件直接封送到原始 HTTP 响应编写器中,而不是使用多部分编码,是输出 CSV 文件的更直接方式。

问题内容

我正在 go 中创建一个服务器,我想使用 csv 文件进行响应。

我写了以下内容,这不会导致浏览器下载 csv 文件。如何提示浏览器下载 csv 文件?

import "github.com/gocarina/gocsv"

type Test struct {
    ID   int
    Name string
    Delete string
}

router.Get("/test", func(writer http.ResponseWriter, request *http.Request) {
    writer.WriteHeader(http.StatusOK)


    tests := []*Test{
        {
            ID:   1,
            Name: "a",
            Delete: "delete",
        },
        {
            ID:   2,
            Name: "b",
            Delete: "delete",
        },
    }

    w := multipart.NewWriter(writer)
    ww, err := w.CreateFormFile("file.csv", "file.csv")
    if err != nil {
        logger.Error("CreateFormfile", zap.Error(err))
    }
    gocsv.Marshal(tests, ww)

})

正确答案


如果您想告诉浏览器将响应作为要下载的文件呈现,您可以使用 Content-Disposition 标头:

rw.header().add("content-disposition", `attachment; filename="test.csv"`)

就输出 csv 文档本身而言, 我不确定您想通过使用多部分编码进行响应来实现什么目的,但您应该将 csv 文件直接封送到原始 http 响应编写器中:

router.Get("/test", func(rw http.ResponseWriter, req *http.Request) {

        tests := []*Test{
            {
                ID:   1,
                Name: "a",
                Delete: "delete",
            },
            {
                ID:   2,
                Name: "b",
                Delete: "delete",
            },
        }

        gocsv.Marshal(tests, rw)

})

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>