Для парсинга формы с типом multipart/form-data
в Go с использованием фреймворка Echo, вы можете воспользоваться встроенными функциями этого фреймворка.
Первым шагом вам понадобится настроить Middleware, чтобы Echo автоматически распознавал тип контента multipart/form-data
. Для этого вы можете использовать функцию echo.Middleware
с параметром echo.MultipartFormConfig
. Например:
import ( "net/http" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" ) func main() { e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Use(middleware.BodyLimit("2M")) // Ограничиваем размер тела запроса до 2 МБ e.Use(middleware.CORS()) // Middleware для обработки CORS // Конфигурация middleware для парсинга multipart/form-data e.Use(middleware.BodyLimit("32M")) // Ограничиваем размер контента до 32 МБ e.Use(middleware.MultipartWithConfig(middleware.MultipartConfig{ MaxMemory: 32 * 1024 * 1024, // Ограничиваем размер в памяти до 32 МБ })) // Добавьте обработчики маршрутов здесь e.Start(":8080") }
После настройки Middleware, вы можете добавить обработчик маршрута, который будет принимать данные из формы. Например:
func handleUpload(c echo.Context) error { // Получить файлы из формы files, err := c.FormFile("files") // files - это имя поля формы, в котором хранятся файлы if err != nil { // Обработка ошибки return err } // Для каждого файла можно выполнить необходимую обработку for _, file := range files { // Получить имя и расширение файла filename := file.Filename extension := filepath.Ext(filename) // Создать новый файл для сохранения dst, err := os.Create("uploads/" + filename) if err != nil { // Обработка ошибки return err } defer dst.Close() // Сохранить файл на сервер if err := c.SaveFile(file, dst); err != nil { // Обработка ошибки return err } // Выполнить дополнительную обработку файла здесь } // Возвратить успешный ответ return c.JSON(http.StatusOK, "Файлы успешно загружены") } func main() { e := echo.New() // Настройка Middleware и других настроек сервера // Добавление обработчика маршрута для загрузки файлов e.POST("/upload", handleUpload) e.Start(":8080") }
В этом примере мы создали обработчик маршрута /upload
, который ожидает получить файлы из формы с полем files
. Затем мы проходим по каждому файлу и сохраняем его на сервере.
Важно помнить о безопасности при работе с загружаемыми файлами. Не забудьте провести необходимую валидацию и фильтрацию загружаемых файлов, чтобы предотвратить возможные атаки.