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