ParseMultipartForm всегда терпит неудачу, хотя форма действительна - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь обработать загруженные файлы на go http сервере.Но вызов ParseMultipartForm всегда завершается ошибкой со странной ошибкой: « multipart: NextPart: EOF », хотя форма действительна.Отладив его, я вижу, что получаю полные закодированные данные, а также размер и параметры.Тем не менее, он не может выполнить анализ.

Вот как я запускаю свой сервер:

func uploadLogoHandler(w http.ResponseWriter, r *http.Request) {
    //fmt.Fprintf(w, "viewLogoHandler, Path: %s!", r.URL.Path[1:])
    bodyBytes, _ := ioutil.ReadAll(r.Body)
    bodyString := string(bodyBytes)
    writeToLog("uploadLogoHandler:" + r.URL.Path, "bodyString length:" + strconv.Itoa(len(bodyString)))
    upload(w, r)
}

///////////////////////////////////////////////////////////////////////////////////////
// main

func main() {
    if(len(os.Args) < 2) {
        fmt.Println("Usage: receiver [port number]")
        os.Exit(1)
    }

    port := os.Args[1]

    s := &http.Server{
        Addr:           ":" + port,
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
    }   
    http.HandleFunc("/uploadLogo/", uploadLogoHandler)
    http.HandleFunc("/", handler)
    log.Fatal(s.ListenAndServe())
}

1 Ответ

0 голосов
/ 30 декабря 2018

На момент написания вопроса я уже нашел проблему.Это в функции ручки.Я прочитал все данные потока перед вызовом функции загрузки.Вот пересмотренный код обработчика, и теперь все работает:

func uploadLogoHandler(w http.ResponseWriter, r *http.Request) {
    writeToLog("uploadLogoHandler:" + r.URL.Path, "")
    upload(w, r)
}

Если я правильно понимаю, ошибка: "multipart: NextPart: EOF" означает, что форма пуста - и она была пустой, потому чтоЯ опустошил буферный поток раньше.

Надеюсь, это поможет другим.Лучший.

...