为了账号安全,请及时绑定邮箱和手机立即绑定

从上载处理 csv 文件

从上载处理 csv 文件

Go
茅侃侃 2022-08-01 19:08:36
我有一个gin应用程序,它收到一个包含csv文件的帖子请求,我想在不保存它的情况下读取该文件。我被困在这里,试图从帖子请求中读取,并显示以下错误消息:cannot use file (variable of type *multipart.FileHeader) as io.Reader value in argument to csv.NewReader: missing method Readfile, err := c.FormFile("file")if err != nil {    errList["Invalid_body"] = "Unable to get request"    c.JSON(http.StatusUnprocessableEntity, gin.H{        "status": http.StatusUnprocessableEntity,        "error":  errList,    })}r := csv.NewReader(file) // <= Error messagerecords, err := r.ReadAll()for _, record := range records {    fmt.Println(record)}有没有一个很好的例子,我可以使用?
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

首先读取文件和标头


csvPartFile, csvHeader, openErr := r.FormFile("file")

if openErr != nil {

    // handle error 

}

然后从文件中读取行


csvLines, readErr := csv.NewReader(csvPartFile).ReadAll()

if readErr != nil {

  //handle error 

}

您可以遍历记录的行


for _, line := range csvLines {

        fmt.Println(line)

    }


查看完整回答
反对 回复 2022-08-01
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

正如其他答案所提到的,你应该先这样做。

最新版本的 似乎只返回两个值。

这对我有用:Open()gin.Context.FromFile(string)


func (c *gin.Context) {

    file_ptr, err := c.FormFile("file")

    if err != nil {

        log.Println(err.Error())

        c.Status(http.StatusUnprocessableEntity)

        return

    }

    log.Println(file_ptr.Filename)

    file, err := file_ptr.Open()

    if err != nil {

        log.Println(err.Error())

        c.Status(http.StatusUnprocessableEntity)

        return

    }

    defer file.Close()

    records, err := csv.NewReader(file).ReadAll()

    if err != nil {

        log.Println(err.Error())

        c.Status(http.StatusUnprocessableEntity)

        return

    }

    for _, line := range records {

        fmt.Println(line)

    }

}


查看完整回答
反对 回复 2022-08-01
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信