2014-09-12 1 views
0

Я собрал golang func, который берет загруженный файл и сохраняет его в папку. Незадолго до os.Create() я получаю следующее сообщение об ошибке:golang загрузить файл err runtime ошибка индекс вне диапазона

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) 

} 

какие-либо идеи? очень ценю

ответ

4

Вы должны хотя бы проверить, действительно ли у r.URL.Query()["id"] один элемент.

Если len(r.URL.Query()["id"]), вы могли бы рассмотреть вопрос не имеет доступа к индексу 0.

Легче, Ainar-G предлагает in the comments использовать Get() method

Get получает первое значение, связанное с данным ключом.
Если никаких значений, связанных с ключом, Get возвращает пустую строку.
Чтобы получить доступ к нескольким значениям, используйте карту напрямую.

+2

Или просто используйте [метод 'Get'] (http://golang.org/pkg/net/url/#Values.Get). –

+0

oi, 'len' равно 0. – bboy

+0

@bboy, объясняющий сообщение об ошибке с индексом, и вам нужно адаптировать свой код для обработки этого случая. – VonC

Смежные вопросы