Files
fn_registry/functions/infra/file_save_disk.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
file_save_disk function go infra 1.0.0 impure func FileSaveDisk(baseDir string, filename string, data io.Reader) (UploadedFile, error) Escribe el contenido de un io.Reader a disco en baseDir con un nombre unico (UUID + extension). Crea el directorio si no existe. Retorna UploadedFile con metadata.
file
save
disk
storage
upload
infra
file_unique_name_go_infra
UploadedFile_go_infra
UploadedFile_go_infra
false error_go_core
fmt
io
mime
os
path/filepath
strings
time
name desc
baseDir directorio destino (se crea si no existe, permisos 0755)
name desc
filename nombre original del archivo (solo se usa para extraer la extension)
name desc
data reader con el contenido binario a escribir
UploadedFile con StoredName (UUID-based), Path completo, Size en bytes, ContentType inferido por extension y CreatedAt (UTC). Error si falla mkdir, create o copy true
guarda contenido en baseDir con nombre UUID
crea baseDir si no existe
tamano coincide con bytes escritos
infiere ContentType desde la extension
functions/infra/file_save_disk_test.go functions/infra/file_save_disk.go

Ejemplo

f, _ := os.Open("./input.png")
defer f.Close()
uploaded, err := FileSaveDisk("./uploads", "input.png", f)
if err != nil {
    log.Fatal(err)
}
fmt.Println(uploaded.Path) // ./uploads/{uuid}.png

Notas

  • El nombre original NUNCA se usa como nombre en disco (riesgo path traversal). Solo se preserva como metadata en el campo Filename para trazabilidad.
  • ContentType se infiere de la extension via mime.TypeByExtension. Para validacion estricta del tipo real, llamar FileValidateType ANTES de guardar y/o sobreescribir el campo.
  • Si falla el io.Copy, el archivo parcial se borra automaticamente.