我几乎完成了一个问题,因为我是Golang的新手,我基本上试图在 os.open 方法中获取文件的绝对路径。我一直在尝试所有类型的东西,但没有任何作用
func UploadProfile(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
infile, header, err := r.FormFile("upload_file")
if err != nil {
http.Error(w, "Error parsing uploaded file: "+err.Error(), http.StatusBadRequest)
return
}
defer infile.Close()
absolue_path := string(filepath.Abs(header.Filename))
// I want to get the absolute path in os.Open
file, err := os.Open(absolute_path)
}
例如,如果我在os.Open中硬编码字符串就像
/Users/Documents/pictures/cats.jpg 然后文件上传成功。当我尝试获取绝对路径并将其放入os.Open时,我在运行时多值filepath.Abs()在单值上下文中得到此错误。有没有其他方法可以获取文件的路径,以便我可以将其放在该方法中?
答案 0 :(得分:2)
根据documentation,Abs
函数将返回两个值,一个字符串和一个错误。
所以你不能有这样的东西:
absolute_path := string(filepath.Abs(header.Filename))
相反,你应该写:
absolute_path, err := filepath.Abs(header.Filename)
另请注意,absolute_path已经是一个字符串。
答案 1 :(得分:2)
此代码行中的编译器错误(单值上下文中的多值filepath.Abs())
absolue_path := string(filepath.Abs(header.Filename))
告诉你filepath.Abs
正在返回多个参数,string
只接受一个参数。
filepath.Abs
会返回string
和error
代码应该是:
ap, err := filepath.Abs(header.Filename)
if err != nil {
// handle error
}