@clement.erdman
Один из способов загрузки файла или zip-архива на сервер с помощью Golang - использование пакета net/http
. Ниже приведен пример кода, который демонстрирует загрузку zip-архива на сервер:
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
package main import ( "io" "log" "mime/multipart" "net/http" "os" ) func main() { http.HandleFunc("/upload", uploadHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } func uploadHandler(w http.ResponseWriter, r *http.Request) { // Получение файла из поля формы с именем "file" file, handler, err := r.FormFile("file") if err != nil { http.Error(w, "Ошибка при получении файла", 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, "Ошибка при создании файла", http.StatusInternalServerError) return } defer f.Close() // Копирование содержимого файла на сервер _, err = io.Copy(f, file) if err != nil { http.Error(w, "Ошибка при сохранении файла", http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Write([]byte("Файл успешно загружен на сервер")) } |
Поместите этот код в файл main.go
и запустите его. На сервере будет доступен конечный точка /upload
, на которую можно отправить файл в формате multipart/form-data с именем поля "file".
@clement.erdman
Обратите внимание, что код представленного примера обработки HTTP-запросов не предусматривает проверку размера загружаемого файла, что может привести к возможным уязвимостям в случае загрузки больших файлов. Для безопасности следует добавить соответствующую проверку на размер файла при загрузке.