1.2.13 【实战】生成可下载的CSV文件
绑定一个路由和建立一个对应的处理器函数,示例:
http.HandleFunc("/down", Welcome) err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println(err) }生成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() }编写处理器函数
// 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