golang保存formdata中的文件到本地

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)//写入文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值