猿问

golang上传文件错误运行时错误索引超出范围

我已经把一个 golang func 放在一起,它接收一个上传的文件并将其保存到文件夹中。就在os.Create()我收到以下错误之前:


http: panic serving [::1]:64373: runtime error: index out of range


我的 golang 函数是:


func webUploadHandler(w http.ResponseWriter, r *http.Request) {


 file, header, err := r.FormFile("file") // the FormFile function takes in the POST input id file


 if err != nil {

    fmt.Fprintln(w, err)

    return

 }

 defer file.Close()


 // My error comes here


 messageId := r.URL.Query()["id"][0]

 out, err := os.Create("./upload/" + messageId + ".mp3")


 if err != nil {

    fmt.Fprintf(w, "Unable to create the file for writing. Check your write access privilege")

    return

 }

 defer out.Close()


 // write the content from POST to the file

 _, err = io.Copy(out, file)

 if err != nil {

    fmt.Fprintln(w, err)

 }


 fmt.Fprintf(w,"File uploaded successfully : ")

 fmt.Fprintf(w, header.Filename)


}

有任何想法吗?非常感谢


拉莫斯之舞
浏览 218回答 1
1回答

收到一只叮咚

您至少应该检查是否 r.URL.Query()["id"]真的有一个元素。如果len(r.URL.Query()["id"]),您可以考虑不访问索引 0。更容易,Ainar-G在评论中建议使用Get() 方法Get 获取与给定键关联的第一个值。如果没有与键关联的值,则 Get 返回空字符串。要访问多个值,请直接使用映射。
随时随地看视频慕课网APP

相关分类

Go
我要回答