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)//写入文件