Files
fn_registry/functions/infra/upload_parse.md
T

2.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
upload_parse function go infra 1.0.0 impure func UploadParse(r *http.Request, maxSize int64) ([]ParsedFile, error) Parsea un request multipart/form-data y extrae todos los archivos adjuntos. Aplica http.MaxBytesReader para limitar el tamano. Carga el contenido en memoria como bytes.Reader.
http
upload
multipart
parse
form
infra
false error_go_core
bytes
fmt
io
mime/multipart
net/http
strings
name desc
r http.Request con Content-Type multipart/form-data
name desc
maxSize tamano maximo total del body en bytes (ej: 10<<20 para 10MB)
slice de ParsedFile con FormField, Filename, Size, MIMEHint, Header (primeros 512 bytes para magic detection) y Content (io.Reader). Error si el body excede maxSize, content-type no es multipart o falla el parse true
extrae un archivo del multipart
extrae multiples archivos
rechaza content-type no multipart
respeta maxSize
functions/infra/upload_parse_test.go functions/infra/upload_parse.go

Ejemplo

files, err := UploadParse(r, 10<<20) // 10 MB
if err != nil {
    HTTPErrorResponse(w, HTTPError{Status: 400, Code: "parse_error", Message: err.Error()})
    return
}
for _, f := range files {
    mime, ok := FileValidateType(f.Header, []string{"image/png", "image/jpeg"})
    if !ok {
        continue
    }
    uploaded, _ := FileSaveDisk("./uploads", f.Filename, f.Content)
    log.Println(uploaded.Path, mime)
}

Notas

Esta implementacion carga TODO el contenido en memoria. Adecuada para archivos pequenos/medianos (<100MB). Para uploads enormes, usar multipart.NewReader(r.Body, boundary) directamente y stream-ear cada parte a disco/S3. MIMEHint viene del header del cliente y NO debe confiarse — usar FileValidateType(f.Header, allowed) para verificacion real.