@modesta
Вы можете загрузить файлы или ZIP-архивы на сервер, используя стандартный пакет net/http
в Go.
Вот пример кода, который позволяет загрузить файл на сервер:
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 43 44 45 46 47 48 49 50 51 52 |
package main import ( "fmt" "io" "log" "net/http" "os" ) func uploadFile(w http.ResponseWriter, r *http.Request) { // Проверяем метод запроса if r.Method != "POST" { w.WriteHeader(http.StatusMethodNotAllowed) fmt.Fprintf(w, "Метод не разрешен") return } // Получаем файл из формы с именем "file" file, handler, err := r.FormFile("file") if err != nil { w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, "Ошибка при получении файла: %v", err) return } defer file.Close() // Создаем новый файл на сервере f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Ошибка при создании файла на сервере: %v", err) return } defer f.Close() // Копируем содержимое загруженного файла в новый файл на сервере _, err = io.Copy(f, file) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Ошибка при копировании файла: %v", err) return } fmt.Fprintf(w, "Файл успешно загружен.") } func main() { http.HandleFunc("/upload", uploadFile) log.Fatal(http.ListenAndServe(":8080", nil)) } |
В файле HTML вы можете использовать форму для загрузки файла:
1 2 3 4 5 6 7 8 9 10 11 12 |
<!DOCTYPE html> <html> <head> <title>Загрузка файла</title> </head> <body> <form action="/upload" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="Загрузить"> </form> </body> </html> |
Чтобы запустить сервер, сохраните код выше в файле с именем main.go
, установите зависимости, а затем выполните в командной строке go run main.go
. Сервер будет запущен на порту 8080.