Golang保存formdata中的文件到本地磁盘

不知为什么的错误

一开始从post请求中获取文件并写入本地磁盘如下是没有问题的:

	file, err := os.Create("./invoice_pdf/" + fileHeader.Filename)
 	defer file.Close()
	if err != nil {
		return errResponeFileDemo(err.Error())
	}
	_, err = io.Copy(file, params.HTTPRequest.Body)
	if err != nil {
		return errResponeFileDemo(err.Error())
	}

这个方法的问题是我没有解析文件名,那么文件名是需要由formfile来获取的,所以我加上了几句话:

	_, fileHeader, err := params.HTTPRequest.FormFile("invoice")
	if err != nil {
		return errResponeFileDemo(err.Error())
	}

	fmt.Println(fileHeader.Filename)
	file, err := os.Create("./invoice_pdf/" + fileHeader.Filename)
 	defer file.Close()
	if err != nil {
		return errResponeFileDemo(err.Error())
	}
	_, err = io.Copy(file, params.HTTPRequest.Body)
	if err != nil {
		return errResponeFileDemo(err.Error())
	}

看似没什么问题实际上fmt.Println的时候也能够正确的打印出文件名并且创建出相应的文件。但是文件夹里写入的文件就变成0KB了,实际上并没有写入,到现在还没悟出来啥原因,可能是没有flush?但是我试了好像也不太行,蹲大佬告知

面向StackOverflow的编程解决

不得不说还是得StackOverflow,参考如下代码可解决相应问题。

	params.HTTPRequest.ParseMultipartForm(32 << 20)// 限制文件大小

	file, handler, err := params.HTTPRequest.FormFile("invoice")//从key解析出文件
	if err != nil {
		return errResponeFileDemo(err.Error())
	}
	defer file.Close()
	f, err := os.OpenFile("./invoice_pdf/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)//根据文件名创建文件路径
	if err != nil {
		fmt.Println(err)
		return errResponeFileDemo(err.Error())
	}
	defer f.Close()
	io.Copy(f, file)//写入文件