Uploads And Filesystems
Configure multipart uploads and object-store-backed filesystem tables.
Uploads
uploads:
enabled: true
max_size: 26214400
allowed_mime: ["image/*", "application/pdf"]
storage: documents
storage_key_prefix: "{date}/"Uploads can be passed as base64 variables or streamed into a filesystem table.
When storage is set, the multipart parser writes the upload to that filesystem source and replaces the GraphQL variable with object metadata: key, content_type, size, url, etag, and modified_at.
Verified by
TestGenerateUploadKey_DateMarker
serv/upload_storage_test.go:122Verified by
TestParseMultipart_MIMEAllowlist
serv/upload_test.go:156Filesystem backends
sources:
- name: documents
kind: file
backend: local
root: ./data/documents
presign_ttl: 15m
capabilities:
files.list: true
files.read: true
files.write: falseBackends include local, S3-compatible stores, and GCS. Slim builds can omit cloud SDK weight when those backends are not needed.
sources:
- name: media
kind: file
backend: s3
bucket: app-media
region: us-east-1
prefix: uploads/
public_base_url: https://cdn.example.com/media/
max_list_page_size: 500Query files
query {
documents(prefix: "invoices/", first: 25, order_by: { key: asc }) {
key
size
content_type
url
}
documents_cursor
}Filesystem tables support list, stat, get, put, delete, presign, cursor pagination, and source-scoped cache invalidation.
Verified by
TestIntrospectionIncludesFilesystemRemoteCursorField
core/intro_test.go:328Verified by
TestBridge_ReadOnlyFilesystemBlocksManagedWrites
core/fstable_bridge_test.go:522