Не удается отправить изображение на сервер Go - PullRequest
0 голосов
/ 11 мая 2019

Недавно я начал работать с Go для создания серверов, в моем текущем эксперименте я пытаюсь загрузить изображение на мой веб-сервер Go / mux с помощью fetch на React.js. Всякий раз, когда я загружаю изображение через форму, сервер не получает изображение и выдает ошибку «нет такого файла». Я использую API FormData JS для хранения и отправки изображения.

Вот код для клиента

handleInput = (e) => {
    let formData = new FormData();
    formData.append("myImage", e.target.files)
    fetch("http://localhost:8080/api", {
      method: 'POST',
      body: formData,
    })
    .then((res) => {
       console.log(res)
    })
    .then(() => {
       console.log("Success")
      })
    .catch((error) => console.error(error))
  }

Вот код для сервера

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

    w.Header().Set("Access-Control-Allow-Origin", "*")

    fmt.Println("Connected -> api route")
    fmt.Fprintf(w, "connected to api")

    // ERROR HERE: no such file / failed to retrieve image
    r.ParseMultipartForm(32 << 20)
    file, _, err := r.FormFile("myImage")
    if err != nil {
        log.Print(err)
        fmt.Println("failed to retrieve image")
        w.WriteHeader(http.StatusBadRequest)
        return
    } else if err == nil {
        fmt.Println("Success")
    }

    defer file.Close()
}

Я попытался добавить и удалить заголовки multipart / form-data, но ни один из них не сработал.

Я новичок в Go и все еще пытаюсь разобраться, любая помощь приветствуется!

1 Ответ

0 голосов
/ 12 мая 2019

Проверка кода, это довольно стандартный метод загрузки файла, работает ли ваш Go api с другими службами ?, Я не могу найти ничего плохого, так что, может быть, больше о том, как настраивается API в целом.

Другая вещь, которую вы можете сделать, это обработать ошибку в

if err := r.ParseMultipartForm(32 << 20); err != nil {
fmt.Println(err)
}

может быть, вы можете иметь лучшее представление об ошибке

Также убедитесь, что ваш файл действительно там, прежде чем добавить его

console.log(e.target.files)
...