Как отправить файл на сервер golang ajax-ом?

Пользователь

от marjorie.goldner , в категории: Общие вопросы , год назад

Как отправить файл на сервер golang ajax-ом?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

Пользователь

от tommie_armstrong , год назад

@marjorie.goldner 

Вам понадобятся следующие шаги, чтобы отправить файл на сервер с использованием Golang и AJAX:

  1. Создайте HTML-форму, которая содержит элемент для выбора файла пользователем.
1
2
3
4
<form id="upload-form">
  <input type="file" id="file-input">
  <input type="submit" value="Upload">
</form>


  1. Задайте обработчик события submit для формы, чтобы перехватить его и отправить файл на сервер через AJAX-запрос.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
document.getElementById('upload-form').addEventListener('submit', function(event) {
  event.preventDefault(); // Отменить стандартное действие формы
  var input = document.getElementById('file-input');
  var file = input.files[0];
  var formData = new FormData();
  formData.append('file', file); // Добавить файл в объект FormData

  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/upload', true); // Указать URL и метод запроса
  xhr.onload = function() {
    if (xhr.status === 200) {
      console.log('Файл успешно загружен');
    } else {
      console.error('Не удалось загрузить файл');
    }
  };
  xhr.send(formData); // Отправить запрос на сервер
});


  1. Создайте обработчик маршрута /upload на сервере Golang, чтобы принять файл и сохранить его на сервере.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func uploadHandler(w http.ResponseWriter, r *http.Request) {
  err := r.ParseMultipartForm(32 << 20) // Парсинг формы с максимальным размером файла 32MB
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
  }

  file, handler, err := r.FormFile("file") // Получение файла из формы
  if err != nil {
    http.Error(w, err.Error(), http.StatusBadRequest)
    return
  }
  defer file.Close()

  // Например, сохранение файла на сервере
  f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
  }
  defer f.Close()

  io.Copy(f, file) // Запись содержимого файла на сервер

  w.WriteHeader(http.StatusOK) // Отправить статус 200 в ответ
}


  1. Зарегистрируйте обработчик маршрута /upload в вашем сервере Golang.
1
2
3
4
func main() {
  http.HandleFunc("/upload", uploadHandler)
  http.ListenAndServe(":8080", nil)
}


Теперь, когда пользователь выбирает файл и отправляет форму, он будет загружен на сервер через AJAX-запрос. Обработчик маршрута /upload сохранит файл на сервере.