From a74de4d6dd9da14fb3b5562e2b95cb124ecab216 Mon Sep 17 00:00:00 2001 From: DarkPhoenix2704 Date: Wed, 22 Oct 2025 12:30:16 +0530 Subject: [PATCH] feat: add uploadFileAsync method for storing files in attachment fields --- content/scripts/api-reference/input.mdx | 79 +++++++++++++++++- content/scripts/changelog.mdx | 13 +++ .../img/v2/scripts/input-uploadFileAsync.png | Bin 0 -> 49862 bytes 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 public/img/v2/scripts/input-uploadFileAsync.png diff --git a/content/scripts/api-reference/input.mdx b/content/scripts/api-reference/input.mdx index 91f281b9..26bffad6 100644 --- a/content/scripts/api-reference/input.mdx +++ b/content/scripts/api-reference/input.mdx @@ -13,7 +13,8 @@ Input methods are asynchronous and pause script execution until the user provide - Collect text input from users - Present users with choices using buttons or dropdown menus - Allow users to select tables, views, fields, or records -- Collect file uploads for data processing +- Upload and parse files for data processing (`fileAsync`) +- Upload files for attachments and storage (`uploadFileAsync`) All input methods return a Promise that resolves to the value provided by the user, so they must be used with `await` to get the result. @@ -195,6 +196,82 @@ if (result && result.parsedContents) { **Output:** ![File Input Example](/img/v2/scripts/input-file-1.png) +### input.uploadFileAsync() + +Prompts the user to upload one or more files and returns raw file objects. This method is ideal for storing files in the database. + +**Parameters:** +- `label` (`string`): The prompt text to display to the user +- `options` (`object`, optional): Additional options for file upload: + - `allowedFileTypes` (`Array`): File extensions, MIME types, or wildcard patterns to accept (e.g., `'.pdf'`, `'image/*'`, `'application/json'`) + +**Returns:** `Promise` - A promise that resolves to an array of file objects + +**NocoDbFile Interface:** +```typescript +interface NocoDbFile { + url?: string; // File URL + title: string; // File name + mimetype: string; // MIME type + size: number; // File size in bytes + signedUrl?: string; // Signed URL for secure access (preferred) + thumbnails?: { // Available for images + tiny: { signedPath: string; signedUrl: string; }; + small: { signedPath: string; signedUrl: string; }; + card_cover: { signedPath: string; signedUrl: string; }; + }; +} +``` + +**Example - Basic file upload:** +```javascript +// Prompt user to upload any file +const files = await input.uploadFileAsync("Please upload your document"); + +console.log(`Uploaded ${files.length} file(s)`); +files.forEach(file => { + console.log(`File: ${file.title}, Size: ${file.size} bytes`); +}); +``` + +**Example - Upload images only:** +```javascript +// Restrict to image files only +const images = await input.uploadFileAsync("Upload product images", { + allowedFileTypes: ['image/*'] +}); + +// Process uploaded images +for (const image of images) { + console.log(`Image: ${image.title}`); + console.log(`MIME Type: ${image.mimetype}`); + console.log(`URL: ${image.signedUrl || image.url}`); +} +``` + +**Example - Upload spreadsheets:** +```javascript +// Accept only Excel and CSV files +const spreadsheets = await input.uploadFileAsync("Upload sales data", { + allowedFileTypes: ['.xlsx', '.csv', 'application/vnd.ms-excel'] +}); + +console.log(`Received ${spreadsheets.length} spreadsheet(s)`); +``` + +**Example - Store uploaded files in database:** +```javascript +const files = await input.uploadFileAsync("Upload product images"); + +await table.createRecordAsync({ + 'AttachmentField': files, +}); +``` + +**Output:** +![File Input Example](/img/v2/scripts/input-uploadFileAsync.png) + + ### input.tableAsync() Prompts the user to select a table from the base. diff --git a/content/scripts/changelog.mdx b/content/scripts/changelog.mdx index da74e536..e120f5c9 100644 --- a/content/scripts/changelog.mdx +++ b/content/scripts/changelog.mdx @@ -6,6 +6,19 @@ icon: 'clock' This page documents all changes to the NocoDB Scripts API, including new features, improvements, bug fixes, and breaking changes. +## October 22, 2025 + +#### New Input Method +- **`input.uploadFileAsync()`** - New method for uploading files + - Returns an array of `NocoDbFile` objects with file metadata + - Supports multiple file uploads simultaneously + - File type validation via `allowedFileTypes` option (MIME types, extensions, or wildcards) + - Example: `await input.uploadFileAsync("Upload images", {allowedFileTypes: ['image/*']})` + - Ideal for storing files in attachment fields. + - Complements existing `input.fileAsync()` which focuses on parsing file contents + +--- + ## October 03, 2025 #### Input Methods Enhancement diff --git a/public/img/v2/scripts/input-uploadFileAsync.png b/public/img/v2/scripts/input-uploadFileAsync.png new file mode 100644 index 0000000000000000000000000000000000000000..75cbbc87b9084bb1de5fafa93cedd9b908cdbd51 GIT binary patch literal 49862 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 K1$D{h@&5%037g6Q literal 0 HcmV?d00001