РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1022 of 1593 menu

Метод http.Request.ParseMultipartForm

Метод ParseMultipartForm принадлежит структуре http.Request и используется для разбора тела HTTP запроса с типом содержимого multipart/form-data. В качестве параметра он принимает максимальный размер данных формы в байтах, которые будут сохранены в памяти. Остальная часть данных будет записана во временный файл. Метод автоматически вызывает ParseForm, если тот еще не был вызван, и заполняет поля Form и PostForm, а также добавляет в MultipartForm данные о загруженных файлах.

Синтаксис

err := r.ParseMultipartForm(maxMemory)

где r - указатель на http.Request, maxMemory - максимальный объем памяти в байтах, выделяемый для хранения данных формы. В случае успеха метод возвращает nil, иначе - ошибку.

Пример с обычными полями формы

Рассмотрим пример, где клиент отправляет форму с текстовыми полями и файлом:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { err := r.ParseMultipartForm(10 << 20) // 10 MB if err != nil { http.Error(w, "Failed to parse form", http.StatusBadRequest) return } name := r.FormValue("name") email := r.PostFormValue("email") fmt.Printf("Name: %s, Email: %s\n", name, email) } } func main() { http.HandleFunc("/upload", handler) http.ListenAndServe(":8080", nil) }

Пример с загрузкой файла

Получим данные о загруженном файле с помощью поля MultipartForm:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { err := r.ParseMultipartForm(10 << 20) // 10 MB if err != nil { http.Error(w, "Failed to parse form", http.StatusBadRequest) return } fileHeaders := r.MultipartForm.File["file"] if len(fileHeaders) > 0 { fileHeader := fileHeaders[0] fmt.Printf("Filename: %s, Size: %d\n", fileHeader.Filename, fileHeader.Size) } } } func main() { http.HandleFunc("/upload", handler) http.ListenAndServe(":8080", nil) }

Пример с несколькими файлами

Обработаем несколько загруженных файлов одновременно:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { err := r.ParseMultipartForm(10 << 20) // 10 MB if err != nil { http.Error(w, "Failed to parse form", http.StatusBadRequest) return } files := r.MultipartForm.File["files"] for i, fileHeader := range files { fmt.Printf("File %d: %s, Size: %d\n", i+1, fileHeader.Filename, fileHeader.Size) } } } func main() { http.HandleFunc("/upload", handler) http.ListenAndServe(":8080", nil) }

Смотрите также

  • функцию http.Request.ParseForm,
    которая разбирает application/x-www-form-urlencoded данные
  • функцию http.Request.FormValue,
    которая возвращает значение поля формы по имени
  • функцию http.Request.PostFormValue,
    которая возвращает значение поля только из тела запроса
  • функцию url.Values,
    которая используется для хранения и работы с параметрами формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить