Handle File Uploads

This guide shows you how to accept and process file uploads in Azu.

Basic File Upload

Create a request contract for file uploads:

struct UploadRequest
  include Azu::Request

  getter file : HTTP::FormData::File
  getter description : String?

  def initialize(@file, @description = nil)
  end
end

struct UploadEndpoint
  include Azu::Endpoint(UploadRequest, UploadResponse)

  post "/upload"

  def call : UploadResponse
    file = upload_request.file

    # Access file properties
    filename = file.filename      # Original filename
    content = file.body           # File content as IO
    content_type = file.headers["Content-Type"]?

    # Save the file
    save_path = File.join("uploads", filename)
    File.write(save_path, content.gets_to_end)

    UploadResponse.new(filename, save_path)
  end
end

HTML Form

Multiple File Uploads

File Size Limits

Validate file size:

Secure File Handling

Sanitize filenames and validate content:

Image Upload with Processing

Cloud Storage Upload

Upload to S3 or compatible storage:

Progress Tracking

Track upload progress with JavaScript:

Cleanup Old Files

Schedule cleanup of old uploads:

See Also

Last updated

Was this helpful?