n8n Binary File to Public URL: Clean Workflow with FilePost
n8n handles files as binary data. That is powerful, but it also trips people up. A node can download a file, receive an email attachment, or accept a form upload, but the file is still just a binary property inside the current workflow item. It does not automatically become a public URL.
The clean pattern is simple: take the binary property, upload it to FilePost, and use the returned url in the next node. Binary file in, permanent CDN URL out.
Quick setup
- Best path: use the verified FilePost community node in n8n.
- Fallback path: use the built-in HTTP Request node with
multipart/form-data. - Input: an n8n binary property, often named
data. - Output: JSON containing
url,file_id, file name, size, and content type.
What n8n Binary Data Actually Means
In n8n, each item can have JSON data and binary data. The JSON side is regular fields like names, IDs, and URLs. The binary side is where files live.
A previous node might output something like this:
{
"json": {
"filename": "invoice.pdf",
"customer": "Acme"
},
"binary": {
"data": {
"fileName": "invoice.pdf",
"mimeType": "application/pdf"
}
}
}
The important part is the binary property name. In this example it is data. In your workflow it might be attachment_0, file, or another name chosen by the previous node.
Method 1: FilePost Node
FilePost has a verified n8n community node. In n8n Cloud, verified community nodes can be discovered from the nodes panel when the instance owner has enabled them. On self-hosted n8n, install community nodes through your instance settings or package setup.
- Open the nodes panel and search for FilePost.
- Install the FilePost community node if it is not already available.
- Create FilePost credentials with your API key.
- Add the FilePost node after the node that produced the binary file.
- Choose Upload File.
- Set the binary property to the property from your previous node, for example
data.
The node returns a JSON response you can use immediately in later steps:
{
"file_id": "a1b2c3d4e5f6",
"url": "https://cdn.filepost.dev/file/filepost/uploads/a1/a1b2c3.pdf",
"name": "invoice.pdf",
"size": 248102,
"content_type": "application/pdf"
}
Use {{ $json.url }} in the next node to insert the public URL into Slack, Airtable, Google Sheets, HubSpot, Notion, or any other service.
Method 2: HTTP Request Node
If you do not want a community node, use n8n's built-in HTTP Request node. This is also useful when you want to see every request detail during debugging.
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://filepost.dev/v1/upload |
| Header | X-API-Key: fh_... |
| Body type | multipart/form-data |
| File parameter name | file |
| Binary property | data, or whatever your previous node outputs |
After the request runs, the response body becomes the JSON input for the next node. The public URL is available at:
{{ $json.url }}
Example Workflow: Form Upload to Public URL
This is the common workflow shape:
- Webhook or form trigger. Receive a submitted file.
- File download step if needed. If the form tool sends a temporary URL, download it as binary data first.
- FilePost upload. Upload the binary property to FilePost.
- Store or send the URL. Write
{{ $json.url }}to Airtable, Google Sheets, Slack, Notion, or a database.
If the previous service gives you a temporary file URL, do not store that URL as the final value. Download it, upload the file, and store the FilePost URL instead.
Example Workflow: Airtable Attachment to Permanent URL
Airtable attachment download URLs expire after a short time. In n8n, the workflow looks like this:
- Airtable trigger finds a record with an attachment.
- HTTP Request downloads the Airtable attachment URL as binary data.
- FilePost uploads that binary file and returns a permanent CDN URL.
- Airtable update writes the CDN URL to a separate
Public URLfield.
That gives Airtable users a stable public URL without using Airtable itself as a CDN.
Troubleshooting
No binary data found
Open the output of the previous node and look for the binary section. Use the exact property name shown there. If there is no binary section, configure the previous HTTP Request node to return a file rather than JSON or text.
Uploaded file is named data
The binary property name and the file name are separate. If n8n only has a generic binary property, set the filename in the previous node or make sure the download step preserves response headers.
413 or file too large
Check both sides. FilePost has plan limits, 50 MB on Free, 200 MB on Starter, and 500 MB on Pro. n8n itself can also run into memory limits before the upload reaches FilePost.
The next node cannot see the URL
Make sure the next node reads the output of the FilePost or HTTP Request node, not the original trigger node. The URL lives in the upload response at $json.url.
Host files from n8n workflows
Upload n8n binary data to FilePost and get a permanent CDN URL back. Free plan includes 300 uploads per month.
Get Your API Key