File Uploads

Azu provides comprehensive file upload handling with support for multiple file types, validation, storage backends, and security features. Built-in support for multipart form data, file type validation, and secure file handling make file uploads straightforward and secure.

What are File Uploads?

File uploads in Azu provide:

  • Multipart Form Support: Handle multipart/form-data requests

  • File Validation: Type, size, and content validation

  • Secure Storage: Safe file storage with path sanitization

  • Progress Tracking: Upload progress monitoring

  • Multiple Backends: Local, cloud, and custom storage options

Basic File Upload

Simple File Upload Endpoint

struct FileUploadEndpoint
  include Azu::Endpoint(FileUploadRequest, FileUploadResponse)

  post "/upload"

  def call : FileUploadResponse
    # Validate request
    unless file_upload_request.valid?
      raise Azu::Response::ValidationError.new(
        file_upload_request.errors.group_by(&.field).transform_values(&.map(&.message))
      )
    end

    # Process file upload
    file = file_upload_request.file
    filename = sanitize_filename(file.filename)
    file_path = save_file(file, filename)

    FileUploadResponse.new({
      filename: filename,
      file_path: file_path,
      size: file.size,
      content_type: file.content_type
    })
  end

  private def sanitize_filename(filename : String) : String
    # Remove dangerous characters
    filename.gsub(/[^a-zA-Z0-9._-]/, "_")
  end

  private def save_file(file : HTTP::FormData::File, filename : String) : String
    # Generate unique filename
    unique_filename = "#{Time.utc.to_unix}_#{filename}"
    file_path = File.join("uploads", unique_filename)

    # Ensure directory exists
    FileUtils.mkdir_p(File.dirname(file_path))

    # Save file
    File.write(file_path, file.content)

    file_path
  end
end

File Upload Request Contract

File Validation

File Type Validation

File Size Validation

File Storage

Local Storage

Cloud Storage

File Processing

Image Processing

Document Processing

Security Features

File Type Validation

Path Traversal Protection

Progress Tracking

Upload Progress

WebSocket Progress Updates

File Management

File Metadata

File Cleanup

Testing File Uploads

Unit Testing

Integration Testing

Best Practices

1. Validate File Types

2. Limit File Sizes

3. Sanitize Filenames

4. Use Secure Storage

5. Handle Errors Gracefully

Next Steps

Now that you understand file uploads:

  1. Security - Implement file upload security

  2. Performance - Optimize file upload performance

  3. Testing - Test file upload functionality

  4. Deployment - Deploy with file upload support

  5. Monitoring - Monitor file upload performance


File uploads in Azu provide a secure and efficient way to handle file uploads. With comprehensive validation, multiple storage backends, and security features, they make building file upload functionality straightforward and reliable.

Last updated

Was this helpful?