Version: v0.8.1 - Beta.  We welcome contributors & feedback.

Input.uploadedFile

Input.uploadedFile($fieldName, $uploadDir, $allowedExtensions, $maxFileSizeMb=0) -> Result

Description

Returns a Result object for the given $fieldName.

If the file passes validation, calling $result.get() will return a FilePathString to the file.

For security, the file will be written to $uploadDir with a randomized filename.

If $uploadDir does not exist, it will be created.

Validation Checks

A file is not valid in the following cases:

Example

// HTML tag:
// <input type="file" name="config">

$result = Input.uploadedFile('config', dir'app:/data/files/configs', 'json,xml')

if $result.isOk() {
    print($result.get())
    //= Ex: '/yourapp/data/files/configs/fjwgSj73Fjs4q434q.json'
}

Complete example:

fun main {
    $page = Page.create({
        main: formHtml()
    })

    Output.sendPage($page)
}

// This will automatically get called instead of 'main' when
// the form is submitted.
fun mainPost {

    $result = Input.uploadedFile('config', dir'configs', 'json')

    if $result.isOk() {
        $file = $result.get()
        $content = $file.read(-join)
        $dataMap = Json.decode($content)
        print($dataMap)
    }
    else {
        print($result.getFailCode())
    }
}

// Note: Upload forms need enctype="multipart/form-data".
tem formHtml {

    <h1> Upload Config File

    <form action="/upload" method="post" enctype="multipart/form-data">
        {{ Web.csrfToken(true) }}

        <input type="file" name="config">
        <small> Supported files: .json, .xml

        <button type="submit">Upload</button>
    </>
}

See Also