Skip to content

File uploads

How the File upload field lets visitors attach a file to a form, where the file is stored, the size limit, and how the file ends up as a member-only download link in the submission.

Add a File upload field (from the Input group) when you want visitors to send you a document, image, receipt or similar. Like other inputs it takes a Field name so the file is bound to the submission, and you can optionally restrict the file types and mark it required.

The File upload field

PropertyWhat it does
Field nameBinds the uploaded file to the submission. Required for the file to be saved.
LabelThe prompt shown above the picker (defaults to "Attach a file").
Accepted typesLimits the file picker, e.g. image/*,.pdf. Advisory — the real gate is the size and storage rules below.
Helper textA hint shown under the field.
RequiredMarks the field mandatory.

As soon as a visitor picks a file, it uploads in the background and the field shows Uploading…, then Uploaded <filename>. They can carry on filling in the rest of the form while that happens.

The 10 MB cap

A single upload may be at most 10 MB. A larger file is rejected with a "File too large" message and nothing is stored. The upload endpoint is also public (form visitors aren't signed in), so it is rate-limited — a burst of uploads from the same address is throttled to keep spammers out.

NOTE

The 10 MB limit is per file. If you need visitors to send several files, add several File upload fields, each with its own field name.

Where files are stored

Uploaded bytes are stored in GridFS — MongoDB's built-in file storage — so FlowRunner needs no external file service or S3 bucket to accept attachments. Each stored file keeps its original filename and content type, plus metadata recording which project it belongs to.

The storage layer is pluggable: GridFS is the default adapter, and an S3/CDN adapter could be swapped in later without changing how forms or submissions behave.

How the file lands in the submission

The field doesn't put the file itself into the response — it stores the file and puts a link to it into the submission under your field name.

So in the Submissions inbox that field's value is the file's URL, which the responses table renders as a clickable File link.

Downloads are member-gated

The upload endpoint accepts files from the public, but the download endpoint does not. Fetching a stored file requires that you are:

  1. signed in, and
  2. a member (viewer or above) of the project the file belongs to.

Anyone else — including the visitor who uploaded it and anyone with the raw link — is refused. Files are always served as an attachment (never rendered inline) with nosniff and no-store caching, so an uploaded HTML or SVG file can't execute in the app and browsers don't cache it. This keeps potentially sensitive uploads private to your team.

WARNING

Because downloads require project membership, sharing a file link with someone outside the workspace won't give them access. To hand a file to an outsider, download it yourself and send it on.

See also

FlowRunner — the no-code platform for small businesses.