Некоторые люди предлагают полагаться на заголовок Content-Length
, и я должен предупредить вас, чтобы он не использовал его вообще. Этот заголовок может быть любым числом, потому что он может быть изменен клиентом независимо от фактического размера файла.
MaxBytesReader Использование потому что:
MaxBytesReader предотвращает клиентов от случайного или злонамеренно отправки большого запроса и тратить ресурсы сервера.
Вот пример:
r.Body = http.MaxBytesReader(w, r.Body, 2 * 1024 * 1024) // 2 Mb
clientFile, handler, err := r.FormFile(formDataKey)
if err != nil {
log.Println(err)
return
}
Если тело запроса больше 2 Мб, вы увидите что-то вроде этого: multipart: NextPart: http: request body too large
'http.MaxBytesReader()' 'ожидает И.О. .ReadCloser', поэтому 'r.Body' следует передавать вместо просто' r': 'r.Body = http.MaxBytesReader (w, r.Body, max)' – icza
Это ограничит общий запрос (включая все поля + заголовки + файлы вместе).Если вы хотите ограничить каждый файл (а не количество файлов), используйте [r.ParseMultipartForm (MaxSize)] (https://golang.org/pkg/net/http/#Request.ParseMultipartForm). Имейте в виду, что вам может понадобиться обе, чтобы быть в безопасности от злоумышленников, загружающих 100 разных 10 МБ файлов в один запрос. – Xeoncross