Skip to content

File Uploads

Single File Upload

@post("/upload", func {
    if $bolt.filesCount() < 1
        $bolt.badRequest("No file uploaded")
        return
    ok
    
    # Get file info (1-indexed!)
    f = $bolt.file(1)
    name = f[:name]
    field = f[:field]
    type = f[:type]
    size = f[:size]
    
    # Validate
    if size > 5 * 1024 * 1024
        $bolt.badRequest("File too large (max 5MB)")
        return
    ok
    
    # Save file
    savePath = "./uploads/" + name
    $bolt.fileSave(1, savePath)
    
    $bolt.json([
        :success = true,
        :file = [
            :name = name,
            :type = type,
            :size = size
        ]
    ])
})

Multiple File Upload

@post("/upload-multiple", func {
    count = $bolt.filesCount()
    
    if count < 1
        $bolt.badRequest("No files uploaded")
        return
    ok
    
    uploaded = []
    
    for i = 1 to count
        f = $bolt.file(i)
        name = f[:name]
        size = f[:size]
        
        # Save each file
        $bolt.fileSave(i, "./uploads/" + name)
        
        add(uploaded, [:name = name, :size = size])
    next
    
    $bolt.json([:uploaded = uploaded, :count = count])
})

HTML Form

<form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit">Upload</button>
</form>

<!-- Multiple files -->
<form action="/upload-multiple" method="POST" enctype="multipart/form-data">
    <input type="file" name="files" multiple />
    <button type="submit">Upload</button>
</form>