1.运行main函数

2.尝试上传 下载 

package main

import (
	"bufio"
	"encoding/csv"
	"fmt"
	"github.com/gin-gonic/gin"
	"io"
	"net/http"
	"os"
)


const (
	SR_File_Max_Bytes = 1024 * 1024 * 2
)

func main() {
	router := gin.Default()
	//本地上传到服务器 csv格式,其他类似 读取内容
	router.GET("/upload", uploadFile)

	//下载文件 读取内容
	router.GET("/download/read",downloadReadFile)

	//下载文件 写内容
	router.GET("/download/write",downloadWriteFile)

	// 默认启动的是 8080端口,也可以自己定义启动端口
	router.Run()
}

func uploadFile(c *gin.Context){
	rFile, err := c.FormFile("file")
	if err != nil {
		c.String(400, "文件格式错误")
		return
	}

	if rFile.Size > SR_File_Max_Bytes {
		c.String(400, "文件大小超过2M")
		return
	}

	file, err := rFile.Open()
	if err != nil {
		c.String(400, "文件格式错误")
		return
	}
	defer file.Close()
	reader := csv.NewReader(bufio.NewReader(file))
	for {
		line, err := reader.Read()
		if err!=nil{
			c.String(400, err.Error())
			return
		}
		//line 就是每一行的内容
		fmt.Println(line)
		//line[0] 就是第几列
		fmt.Println(line[0])
	}

}

func downloadReadFile(c *gin.Context){
	//http下载地址 csv
	csvFileUrl := c.PostForm("file_name")
	res, err := http.Get(csvFileUrl)
	if err != nil {
		c.String(400, err.Error())
		return
	}
	defer res.Body.Close()
	//读取csv
	reader := csv.NewReader(bufio.NewReader(res.Body))
	for {
		line, err := reader.Read()
		if err == io.EOF {
			break
		} else if err != nil {
			c.String(400, err.Error())
			return
		}
		//line 就是每一行的内容
		fmt.Println(line)
		//line[0] 就是第几列
		fmt.Println(line[0])
	}
}

func downloadWriteFile(c *gin.Context){
	//写文件
	var filename = "./output1.csv"
	if !checkFileIsExist(filename){
		file, err := os.Create(filename) //创建文件
		if err!=nil{
			c.String(400, err.Error())
			return
		}
		buf := bufio.NewWriter(file) //创建新的 Writer 对象
		buf.WriteString("test")
		buf.Flush()
		defer file.Close()
	}
	//返回文件流
	c.File(filename)
}


//判断文件是否存在  存在返回 true 不存在返回false
func checkFileIsExist(filename string) bool {
	var exist = true
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		exist = false
	}
	return exist
}

基本的读写操作都有了