Skip to content

feat(files): Add multiple files upload field - #755

Closed
aXenDeveloper wants to merge 1 commit into
canaryfrom
claude/multiple-files-support-safdp8
Closed

feat(files): Add multiple files upload field#755
aXenDeveloper wants to merge 1 commit into
canaryfrom
claude/multiple-files-support-safdp8

Conversation

@aXenDeveloper

Copy link
Copy Markdown
Owner

Adds first-party support for uploading several files at once: a
POST /users/files endpoint that takes a repeated files field, and an
AutoFormFiles form field that talks to it by picking or dropping files.

  • Role settings (allowUploadFiles, totalMaxStorage, maxStorageForSubmit)
    are finally enforced: the most permissive caps across a user's roles, with
    null meaning unlimited and root bypassing both.
  • The batch is validated as a whole before anything is stored, and a failure
    halfway removes what already landed, so a rejected batch stores nothing.
  • GET /users/files/upload-limits reports what the user may upload now, so the
    field refuses a file without spending an upload - the same rule, shared code.
  • storage.uploads config picks the accepted MIME types (wildcards welcome),
    the folder and the per-submit file count. SVG is left out of the defaults.
  • StorageModel.upload() now returns the core_files row it created, and its
    MIME allowlist understands image/*.
  • Every stored file emits the new file.uploaded event.
  • "My Files" gets an upload dialog built on the field.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01UVna1pS31PRmWr9JPVSggf

Adds first-party support for uploading several files at once: a
`POST /users/files` endpoint that takes a repeated `files` field, and an
`AutoFormFiles` form field that talks to it by picking or dropping files.

- Role settings (`allowUploadFiles`, `totalMaxStorage`, `maxStorageForSubmit`)
  are finally enforced: the most permissive caps across a user's roles, with
  `null` meaning unlimited and `root` bypassing both.
- The batch is validated as a whole before anything is stored, and a failure
  halfway removes what already landed, so a rejected batch stores nothing.
- `GET /users/files/upload-limits` reports what the user may upload now, so the
  field refuses a file without spending an upload - the same rule, shared code.
- `storage.uploads` config picks the accepted MIME types (wildcards welcome),
  the folder and the per-submit file count. SVG is left out of the defaults.
- `StorageModel.upload()` now returns the `core_files` row it created, and its
  MIME allowlist understands `image/*`.
- Every stored file emits the new `file.uploaded` event.
- "My Files" gets an upload dialog built on the field.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UVna1pS31PRmWr9JPVSggf
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@vercel

vercel Bot commented Aug 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
vitnode-docs Error Error Aug 23, 2026 10:15am

@github-actions github-actions Bot added the 💡 Feature A new feature label Aug 23, 2026
@aXenDeveloper
aXenDeveloper deleted the claude/multiple-files-support-safdp8 branch August 23, 2026 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💡 Feature A new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants