File Upload

GoNest handles multipart file uploads using the FileInterceptor.

Basic Upload

func (c *FilesController) Register(r gonest.Router) {
    r.Post("/upload", c.upload).
        Interceptors(gonest.NewFileInterceptor("file", 5<<20)) // 5MB max
}

func (c *FilesController) upload(ctx gonest.Context) error {
    file := gonest.GetUploadedFile(ctx, "file")
    if file == nil {
        return gonest.NewBadRequestException("file is required")
    }

    // file.Filename, file.Size, file.MimeType
    data, _ := gonest.ReadFileBytes(file)
    // ... save data
    return ctx.JSON(201, map[string]string{"filename": file.Filename})
}

Validation

// Type validation
validator := &gonest.FileTypeValidator{
    AllowedTypes: []string{".jpg", ".png", ".pdf"},
}
if err := validator.Validate(file); err != nil {
    return err
}

// Size validation
sizeValidator := &gonest.FileSizeValidator{MaxSize: 2 << 20} // 2MB
if err := sizeValidator.Validate(file); err != nil {
    return err
}

UploadedFile Fields

FieldTypeDescription
FilenamestringOriginal filename
Sizeint64File size in bytes
MimeTypestringContent type
Filemultipart.FileFile reader
Header*multipart.FileHeaderFull header

Client Usage

curl -X POST http://localhost:3000/api/files/upload \
  -F "file=@photo.jpg"