为了账号安全,请及时绑定邮箱和手机立即绑定

`io.Copy` 文件大小与原始文件不同

`io.Copy` 文件大小与原始文件不同

Go
MM们 2022-05-18 14:15:04
我正在处理多部分/表单数据文件上传,我的后端使用 Goio.Copy将表单数据复制到本地文件。func SaveFileHandler() error {    ...    file := form.File["file_uploaded"] // file uploaded in form    src, _ := file.Open()    // here the original file size is 35540353 in my case,     // which is a video/mp4 file    fmt.Println(file.Size)     // create a local file with same filename    dst, _ := os.Create(file.Filename)    // save it    _, err = io.Copy(dst, src)    // err is nil    fmt.Println(err)     stat, _ := dst.Stat()    // then the local file size differs from the original updated one. Why?    // local file size becomes 35537281 (original one is 35540353)    fmt.Println(stat.Size())     // meanwhile I can't open the local video/mp4 file,     // which seems to be broken due to losing data from `io.Copy`    ...怎么可能?是否有任何最大缓冲区大小io.Copy?或者在这种情况下文件mime类型是否重要?我尝试使用 png 和 txt 文件,并且都按预期工作。Go 版本是go1.12.6 linux/amd64
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

您的问题中没有太多信息,但是根据您所说,我敢打赌,在您调用dst.Stat(). 您可以先关闭文件以确保数据已完全刷新:


func SaveFileHandler() error {

    ...


    // create a local file with same filename

    dst, _ := os.Create(file.Filename)


    // save it

    _, err = io.Copy(dst, src)


    // Close the file

    dst.Close()


    // err is nil

    fmt.Println(err) 


    stat, _ := dst.Stat()    

    ...


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号