Go-什么是真正的多部分文件?

Go-什么是真正的多部分文件?,go,Go,据说 如果存储在磁盘上,文件的底层具体类型将是 *文件 在这种情况下,一切都很清楚。伟大的但是,如果文件存储在内存中,如果不是,会发生什么 我的实际问题是,我试图获取通过html表单存储在内存中的不同文件的大小,但我不能使用os.Stat来执行fileInfo.size(),因为我没有文件的位置,只有文件名 fhs := req.MultipartForm.File["files"] for _, fileHeader := range fhs { file, _ := fileHead

据说

如果存储在磁盘上,文件的底层具体类型将是 *文件

在这种情况下,一切都很清楚。伟大的但是,如果文件存储在内存中,如果不是,会发生什么

我的实际问题是,我试图获取通过html表单存储在内存中的不同文件的大小,但我不能使用os.Stat来执行fileInfo.size(),因为我没有文件的位置,只有文件名

fhs := req.MultipartForm.File["files"]
for _, fileHeader := range fhs {
    file, _ := fileHeader.Open()
    log.Println(len(file)) // Gives an error because is of type multipart.File
    fileInfo, err  := os.Stat(fileHeader.Filename) // Gives an error because it´s just the name, not the complete path

    // Here I would do things with the file
}

如果调用
parseMultipartForm(0)
这会将整个文件写入磁盘,而不是将任何内容存储在内存中,然后是
f、\u:=FormFile(“文件”)
,那么您可以使用
fi、\u:=f.(*os.file).stat()来统计文件,具体取决于您对数据的处理方式,最好是使用ioutil.ReadAll将文件读入字节片。(无论如何,您最终可能希望将数据作为字节片。)完成此操作后,您可以使用len查找长度。

您可以利用multipart.File实现io.seek的事实来查找其大小

cur, err := file.Seek(0, 1)
size, err := file.Seek(0, 2)
_, err := file.Seek(cur, 0)
第一行查找文件的当前偏移量。第二个查找文件的结尾,并返回与文件开头相关的位置。这是文件的大小。第三种方法是寻找我们在试图找到尺寸之前的偏移量


您可以阅读更多有关seek方法的信息。

谢谢,我正在考虑一个可能的解决方案,如此,但从未使用seek方法,也不知道它这么容易使用:)