使用go语言对csv文件进行解析处理,导入导出。
使用的框架是gin
包为”github.com/gocarina/gocsv”
创建csv文件并且导出给前端
import (
"github.com/gocarina/gocsv"
)
//创建文件流
f, err := os.Create("dictList.csv")
//关闭流
defer f.Close()
//写入UTF-8 格式
f.WriteString("\xEF\xBB\xBF")
var newContent [][]string
//添加数据
newContent = append(newContent, []string{"1", "2", "3", "4", "5", "6"})
//保存文件流
err = gocsv.MarshalFile(newContent, f)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
//传输文件流(使用gin或者http的时候向前端发送的流文件)
c.File("dictList.csv")
//删除文件
_ = os.Remove("dictList.csv")
)
解析csv文件并且导出给前端
response.FailWithMessage为自己封装的报错信息,根据自己实际情况做出改变
//获取文件头
file, err := c.FormFile("file")
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
//获取文件名
fileName := file.Filename
//获取文件后缀名
fileSuffix := path.Ext(fileName)
//后缀名判断
if fileSuffix != ".csv" {
response.FailWithMessage("文件后缀格式有误", c)
return
}
//SaveUploadedFile(文件头,保存路径)
if err := c.SaveUploadedFile(file, fileName); err != nil {
response.FailWithMessage("保存失败", c)
os.Remove(fileName)
return
}
//打开流
clientsFile, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
if err != nil {
response.FailWithMessage(err.Error(), c)
os.Remove(fileName)
return
}
//关闭流
defer clientsFile.Close()
//解析csv文件到结构体,clients为自己定义的结构体
if err := gocsv.UnmarshalFile(clientsFile, &clients); err != nil {
response.FailWithMessage("文件内容格式有误", c)
os.Remove(fileName)
return
}
for _, client := range clients {
.....
//遍历clients,每个结构体参数用client来获取,并按照需求进行处理
}
//删除上传文件
os.Remove(fileName)
insert.Commit()
response.OkWithMessage("导入成功", c)
本作品采用《CC 协议》,转载必须注明作者和本文链接