Upload to Storage
Use this action when you want to save a file or binary response into your company storage and reuse the uploaded file later.
Best for
- Saving a file downloaded from an HTTP request
- Storing generated documents or media
- Getting a file URL to use in later messages or records
Main fields
| Field | What it does |
|---|---|
| Content | The file data to upload |
| Content type | The MIME type, such as image/png or application/pdf. Auto-detected from the file name if omitted |
| File name | An optional file name |
| Category | Organizes the file as an image, video, audio, or document. Auto-detected from the content type if omitted |
| Public | Controls whether the uploaded file should be openly accessible |
| Purpose | Optional. Only certain values are kept as the file's purpose; see the note below |
About Purpose: the kept values are workflow_storage_upload (the default), action_response_media, dynadata, storage_manual_upload, whatsapp_catalog_product_image, template_message_media, chat_media_upload and scheduled_message_media. Any other value is stored as workflow_storage_upload, but still appears in the step log. Avatar and icon purposes (contact_avatar, company_logo, user_avatar, autochat_integration_avatar, autochat_widget_icon) are not honoured, so a workflow cannot fill those fields. Use dynadata for a file you'll attach to a record's file field.
What later steps can use
Upload results are available at:
workflow.step(N).fileworkflow.step(N).signedUrlworkflow.step(N).contentTypeworkflow.step(N).size
Tips
- Pair this with HTTP request when you want to download a file first.
- Turn on Return as buffer in the HTTP step when you are working with binary files.
- Use the signed URL in later message or record-update steps when you need immediate access to the uploaded file. The signed URL is temporary and expires after about 15 minutes — store
workflow.step(N).fileinstead when a later step needs a long-term reference. - Content type is normalized when the file is stored, and the step's
contentTypeoutput shows the stored value. Renderable or unsafe types (HTML, SVG, XML and+xmltypes, multipart, comma-separated lists, malformed values) are stored asapplication/octet-stream. Documents are stored without parameters and must be a supported document type (PDF, plain text, CSV, JSON, ZIP, Word, Excel, PowerPoint or RTF), otherwiseapplication/octet-stream. Images are stored without parameters. Audio and video keep only thecodecsparameter, soaudio/ogg; codecs=opusstays usable for voice notes. PassingcontentType=maps.get(workflow.step(0),'headers.content-type')still works; the value is just normalized.