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

我正在处理多部分/表单数据文件上传,我的后端使用 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


MM们
浏览 154回答 1
1回答

MYYA

您的问题中没有太多信息,但是根据您所说,我敢打赌,在您调用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()        ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go