Beta documentation. This is an early preview — content is still in active development. Feedback helps shape the final release. Share your thoughts or join the discussion.

api.files & api.folders

`api.files` and `api.folders` work together — folders organize files, files live in folders. Upload from your device or import from a URL.

On this page

The files & folders domains

api.files and api.folders work together — folders organize files, files live in folders. Upload from your device or import from a URL.

api.files reference

Function Returns Description
api.files.get(id) table or nil Get file metadata + URLs
api.files.list(filter?) { items, total } List files with filters
api.files.upload(data) table Upload from $_FILES (multipart form)
api.files.import(url, folderId) table Download a file from a URL
api.files.rename(id, name) table Rename a file
api.files.delete(id) boolean Delete a file

api.folders reference

Function Returns Description
api.folders.get(id) table or nil Get folder info
api.folders.list(parentId?) table[] List folders (no pagination)
api.folders.create(name, parentId?) table Create a folder
api.folders.rename(id, name) table Rename a folder
api.folders.delete(id) boolean Delete a folder

Upload a file

app:post("/upload", function(ctx)
    local file = req.files.photo
    if not file then
        ctx:flash("error", "No file selected")
        return ctx:redirect("/upload")
    end

    local uploaded = api.files.upload({ file = file })
    ctx:flash("success", "Uploaded: " .. uploaded.name)
    return ctx:redirect("/files")
end)

Import from URL

app:post("/import", function(ctx)
    local url = req.post.url
    local folder_id = tonumber(req.post.folder) or 0

    local file = api.files.import(url, folder_id)
    return ctx:redirect("/files")
end)

File browser

app:get("/files", function(ctx)
    local folder_id = tonumber(req.query.folder) or 0

    local files = api.files.list({
        folderid = folder_id,
        order = "id_desc",
        limit = 50
    })

    local folders = api.folders.list(folder_id)

    return ctx:render("files", {
        files = files.items,
        folders = folders,
        current_folder = folder_id,
        total = files.total
    })
end)

Creating folder structure

-- Organize uploads
local docs = api.folders.create("Documents")
local images = api.folders.create("Images")
api.folders.create("Reports", docs.id)     -- sub-folder
api.folders.create("Invoices", docs.id)     -- sub-folder

File list filter

api.files.list({
    folderid = 5,          -- filter by folder
    search = "photo",      -- search file names
    order = "id_desc",     -- sort order
    page = 1,
    limit = 50
})

File URLs

Each file object includes multiple URLs:

local file = api.files.get(200)
print(file.url)         -- https://yoursite.wapka.site/files/photo.jpg
print(file.cdn_url)     -- https://cdn.wapka.org/files/200/photo.jpg
print(file.thumb_url)   -- https://cdn.wapka.org/thumbs/200/photo.jpg

Use cdn_url for better performance — it's served from a global CDN.

Next: api.pages & api.codes — read site pages and code blocks.

Previous api.messages Next api.pages & api.codes