mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-07 04:38:19 +08:00
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
// Copyright 2026 Gin Core Team. All rights reserved.
|
|
// Use of this source code is governed by a MIT style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gin
|
|
|
|
import (
|
|
"errors"
|
|
"mime"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
func parseMultipartForm(req *http.Request, maxMemory int64) error {
|
|
err := req.ParseMultipartForm(maxMemory)
|
|
if err == nil || !errors.Is(err, http.ErrNotMultipart) {
|
|
return err
|
|
}
|
|
|
|
mediaType, _, parseErr := mime.ParseMediaType(req.Header.Get("Content-Type"))
|
|
if parseErr != nil || mediaType != MIMEMultipartMixed {
|
|
return err
|
|
}
|
|
|
|
reader, readerErr := req.MultipartReader()
|
|
if readerErr != nil {
|
|
return readerErr
|
|
}
|
|
|
|
form, readErr := reader.ReadForm(maxMemory)
|
|
if readErr != nil {
|
|
return readErr
|
|
}
|
|
req.MultipartForm = form
|
|
|
|
if req.PostForm == nil {
|
|
req.PostForm = make(url.Values)
|
|
}
|
|
for key, values := range form.Value {
|
|
req.PostForm[key] = append(req.PostForm[key], values...)
|
|
}
|
|
|
|
if req.Form == nil {
|
|
req.Form = make(url.Values, len(req.PostForm))
|
|
for key, values := range req.PostForm {
|
|
req.Form[key] = append(req.Form[key], values...)
|
|
}
|
|
}
|
|
if req.URL != nil {
|
|
for key, values := range req.URL.Query() {
|
|
req.Form[key] = append(req.Form[key], values...)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|