Go - 什么是真正的multipart.File?

Alv*_*ban 5 go

据说,在文档

如果存储在磁盘上,File的底层具体类型将是*os.File.

在这种情况下,一切都很清楚.大.但是,如果没有,如果文件存储在内存中会发生什么?

我的实际问题是我试图通过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
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*erg 6

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

cur, err := file.Seek(0, 1)
size, err := file.Seek(0, 2)
_, err := file.Seek(cur, 0)
Run Code Online (Sandbox Code Playgroud)

第一行查找文件的当前偏移量.第二个寻找文件的末尾并返回它与文件开头的关系.这是文件的大小.第三个是在寻找尺寸之前寻求我们所处的抵消.

您可以在此处阅读有关搜索方法的更多信息.