MultiUpload Flow is a reusable file upload component for OutSystems 11 Reactive Web Applications. It provides drag-and-drop file selection, multiple file processing, progress tracking, file previews, validation, and customizable styling.
Install MultiUpload Flow from the OutSystems Forge.
Open your Reactive Web Application in Service Studio.
Open Manage Dependencies and add the MultiUploadFlow Web Block.
Drag the Web Block into your application screen.
Configure the input parameters and implement the required event handlers.
Publish your application.
AcceptedTypes (Text): Allowed file extensions separated by commas. Example: pdf,png,jpe?g,docx.
pdf,png,jpe?g,docx
MaxFiles (Integer): Maximum number of files. Use 0 for unlimited.
0
MaxFileSizeMB (Integer): Maximum file size in MB. Use 0 for unlimited.
QueueHeight (Integer): Maximum height of the file list in pixels. Example: 365.
365
Locale (Text): Interface language. Supported values: pt-BR and en-US.
pt-BR
en-US
DarkMode (Boolean): Enables or disables the dark theme.
ExtendClass (Text): Applies a custom CSS class to the component. Leave empty to preserve its default appearance.
OnUploadComplete
Triggered when an individual file finishes browser-side processing.
Returns:
FileId — Unique file identifier.
FileId
FileName — Original filename.
FileName
Base64 — Base64-encoded file content.
Base64
MimeType — File MIME type.
MimeType
OnUploadError
Triggered when a file encounters a validation or processing error.
FileName — Name of the affected file.
ErrorMessage — Description of the error.
ErrorMessage
OnAllUploadsComplete
Triggered when the file batch finishes processing.
TotalFiles — Total number of files processed.
TotalFiles
CompletedFiles — Successfully processed files.
CompletedFiles
FailedFiles — Failed files.
FailedFiles
AllCompleted — Boolean indicating whether the entire batch completed successfully.
AllCompleted
OnFileRemoved
Triggered when a file is removed from the upload list.
FileId — Identifier of the removed file.
FileSize — File size in bytes.
FileSize
The OnUploadComplete event returns file content as Base64-encoded text.
Use the appropriate OutSystems conversion logic to decode the content into Binary Data before storing it.
Important: MultiUpload Flow does not automatically save files to a database or external storage. File persistence must be implemented by the consuming application.
Use the FileId parameter to synchronize file removal with your application's file list.
Store the FileId received from OnUploadComplete with the corresponding file data.
Handle the OnFileRemoved event.
Locate the matching record using its FileId.
Remove that record from your application's list.
If the file was already persisted, perform server-side deletion separately when required.
Using FileId avoids confusion when multiple files have identical names.
Use DarkMode to enable the built-in dark theme.
DarkMode
Use ExtendClass to apply your application's CSS class.
ExtendClass
Example — ExtendClass:
custom-upload
Example — Application CSS:
.custom-upload { --muf-accent: #8b5cf6; --muf-panel: #181826; --muf-surface: #242438; --muf-t: #ffffff; --muf-muted: #b0b0b0; --muf-line: #44445c; --muf-radius: 6px; }
Leave ExtendClass empty to use the component's default styling.
File selection and reading take place in the browser.
Individual file completion does not necessarily indicate successful database storage.
Large files can increase browser memory usage because their content is encoded in Base64.
File validation in the browser does not replace server-side validation.
The consuming application is responsible for authorization, secure storage, and any permanent file deletion.