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

时间:2014-09-12 08:40:38

标签: file-upload go runtime-error

我已经整理了一个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)

}

任何想法?非常感谢

1 个答案:

答案 0 :(得分:4)

您至少应该检查r.URL.Query()["id"]是否实际上有一个元素。

如果len(r.URL.Query()["id"]),您可以考虑不访问索引0。

更简单,Ainar-G建议in the comments使用Get() method

  

获取与给定密钥关联的第一个值。
  如果没有与该键相关联的值,则Get返回空字符串   要访问多个值,请直接使用地图。