1.2.13 【实战】生成可下载的CSV文件

  1. 绑定一个路由和建立一个对应的处理器函数,示例:

    http.HandleFunc("/down", Welcome)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
    	fmt.Println(err)
    }
  2. 生成CSV文件,示例如下:

    func GenerateCsv(filePath string, data [][]string)  {
    	file, err := os.Create(filePath) // 创建文件句柄
    	if err != nil {
    		log.Fatalf("创建文件[" + filePath + "]句柄失败,%v", err)
    		return
    	}
    	defer file.Close()
    	
    	file.WriteString("\xEF\xBB\xBF")  // 写入UTF-8 BOM
    	w := csv.NewWriter(file)	// 创建一个新的写入文件流
    	w.WriteAll(data)
    	w.Flush()
    }
  3. 编写处理器函数

    // Welcome 编写处理器函数
    func Welcome(w http.ResponseWriter, r *http.Request) {
    	// 定义导出的文件名
    	filename := "exportUsers.csv"
    
    	// 定义一个二维数组
    	column := [][]string{
    		{"手机号", "用户uid", "Email", "用户名"},
    		{"18888888888", "2", "[email protected]", "barry"},
    		{"19999999999", "3", "[email protected]", "wangwu"},
    	}
    	
    	// 导出
    	GenerateCsv(filename, column)
    	// 读取文件
    	file, err := os.Open(filename)
    	content, err := ioutil.ReadAll(file)
    	// 下载文件
    	w.Header().Set("Content-Type", "application/octet-stream")
    	w.Header().Set("content-disposition", "attachment;filename=\""+ filename + "\"")
    	if err != nil {
    		fmt.Println("Read File Err:", err.Error())
    	} else {
    		w.Write(content)
    	}
    }

Last updated