@marjorie.goldner
Вам понадобятся следующие шаги, чтобы отправить файл на сервер с использованием Golang и AJAX:
- Создайте HTML-форму, которая содержит элемент для выбора файла пользователем.
1
2
3
4
|
<form id="upload-form">
<input type="file" id="file-input">
<input type="submit" value="Upload">
</form>
|
- Задайте обработчик события 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); // Отправить запрос на сервер
});
|
- Создайте обработчик маршрута /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 в ответ
}
|
- Зарегистрируйте обработчик маршрута /upload в вашем сервере Golang.
1
2
3
4
|
func main() {
http.HandleFunc("/upload", uploadHandler)
http.ListenAndServe(":8080", nil)
}
|
Теперь, когда пользователь выбирает файл и отправляет форму, он будет загружен на сервер через AJAX-запрос. Обработчик маршрута /upload
сохранит файл на сервере.