n8n - 💡(How to fix) Fix Form Ending not working with multiple binary files [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
n8n-io/n8n#28996Fetched 2026-04-24 06:12:50
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
0
Timeline (top)
commented ×1labeled ×1mentioned ×1subscribed ×1

Error Message

{"code":0,"message":"Workflow Form Error: Workflow could not be started!","stacktrace":"Error: Workflow Form Error: Workflow could not be started!\n at Object.executeWebhook (/usr/lib/node_modules/n8n/src/webhooks/webhook-helpers.ts:569:21)"}

Code Example

const items = $input.all();

const binary = {};
items.forEach((item, i) => {
  const key = Object.keys(item.binary)[0];
  binary[`data${i + 1}`] = item.binary[key];
});

return [{ json: {}, binary }];

---

{"code":0,"message":"Workflow Form Error: Workflow could not be started!","stacktrace":"Error: Workflow Form Error: Workflow could not be started!\n    at Object.executeWebhook (/usr/lib/node_modules/n8n/src/webhooks/webhook-helpers.ts:569:21)"}

---

{
  "nodes": [
    {
      "parameters": {
        "formTitle": "test",
        "formDescription": "test",
        "formFields": {
          "values": [
            {
              "fieldLabel": "test 1",
              "fieldType": "file"
            },
            {
              "fieldLabel": "test 2",
              "fieldType": "file"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.5,
      "position": [
        0,
        0
      ],
      "id": "3a52abab-7c0a-4bb5-9ca1-8d0de459c753",
      "name": "On form submission",
      "webhookId": "78bd5f75-3e6a-41f7-ac02-53877b82819d"
    },
    {
      "parameters": {
        "operation": "completion",
        "respondWith": "returnBinary",
        "completionTitle": "finish test",
        "inputDataFieldName": "={{ Object.keys($binary).join(',') }}",
        "options": {}
      },
      "type": "n8n-nodes-base.form",
      "typeVersion": 2.5,
      "position": [
        1120,
        32
      ],
      "id": "f0732486-1f0d-4e11-afc4-e67a99d99776",
      "name": "Form",
      "webhookId": "43959bca-7a44-4839-98a8-f900bd974d11"
    },
    {
      "parameters": {
        "operation": "text",
        "binaryPropertyName": "test_1",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        208,
        -64
      ],
      "id": "3ea1c229-6a3b-4688-8eeb-95599a80bd44",
      "name": "Extract from File"
    },
    {
      "parameters": {
        "operation": "text",
        "binaryPropertyName": "test_2",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        208,
        112
      ],
      "id": "302af422-d73c-4c3e-84fd-abd239774622",
      "name": "Extract from File1"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        480,
        32
      ],
      "id": "567aded2-d59e-4d62-b6d4-12315ebf57d1",
      "name": "Merge"
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst binary = {};\nitems.forEach((item, i) => {\n  const key = Object.keys(item.binary)[0];\n  binary[`data${i + 1}`] = item.binary[key];\n});\n\nreturn [{ json: {}, binary }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        896,
        32
      ],
      "id": "bfaaa64a-7477-4b91-8abe-bd081842a135",
      "name": "Code in JavaScript"
    }
  ],
  "connections": {
    "On form submission": {
      "main": [
        [
          {
            "node": "Extract from File1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File1": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "cf4367492d34bb4e3c07a58320944bd2f74a2f520740b248009864d36f47bda6"
  }
}
RAW_BUFFERClick to expand / collapse

Bug Description

Hi,

When using a worflow to upload multiple different files, edit them and download them again, e.g. a form ending action with "return binary file" action, it works with a single file, but not with mutiple.

To Reproduce

  1. Create a new Flow
  2. Add a Forms Trigger
  3. Set up at least 2 File upload
  4. add an "extract from file" action per file upload form entry
  5. add a merge action
  6. add custom code to merge the different items to one item while keeping them as type binary (combine action can't do this)
const items = $input.all();

const binary = {};
items.forEach((item, i) => {
  const key = Object.keys(item.binary)[0];
  binary[`data${i + 1}`] = item.binary[key];
});

return [{ json: {}, binary }];
  1. Form closing action with return binary file
  2. Set input data field name to data1 from first file
  3. Test, see successful download of file 1
  4. Set input data field name to data2 from second file
  5. Test, see successful download of file 2
  6. Set input data field to {{ Object.keys($binary).join(',') }} (all binary) or something like data1, data2
  7. Test, see failure on forms:
{"code":0,"message":"Workflow Form Error: Workflow could not be started!","stacktrace":"Error: Workflow Form Error: Workflow could not be started!\n    at Object.executeWebhook (/usr/lib/node_modules/n8n/src/webhooks/webhook-helpers.ts:569:21)"}
<details> <summary>Small test code</summary>
{
  "nodes": [
    {
      "parameters": {
        "formTitle": "test",
        "formDescription": "test",
        "formFields": {
          "values": [
            {
              "fieldLabel": "test 1",
              "fieldType": "file"
            },
            {
              "fieldLabel": "test 2",
              "fieldType": "file"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.5,
      "position": [
        0,
        0
      ],
      "id": "3a52abab-7c0a-4bb5-9ca1-8d0de459c753",
      "name": "On form submission",
      "webhookId": "78bd5f75-3e6a-41f7-ac02-53877b82819d"
    },
    {
      "parameters": {
        "operation": "completion",
        "respondWith": "returnBinary",
        "completionTitle": "finish test",
        "inputDataFieldName": "={{ Object.keys($binary).join(',') }}",
        "options": {}
      },
      "type": "n8n-nodes-base.form",
      "typeVersion": 2.5,
      "position": [
        1120,
        32
      ],
      "id": "f0732486-1f0d-4e11-afc4-e67a99d99776",
      "name": "Form",
      "webhookId": "43959bca-7a44-4839-98a8-f900bd974d11"
    },
    {
      "parameters": {
        "operation": "text",
        "binaryPropertyName": "test_1",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        208,
        -64
      ],
      "id": "3ea1c229-6a3b-4688-8eeb-95599a80bd44",
      "name": "Extract from File"
    },
    {
      "parameters": {
        "operation": "text",
        "binaryPropertyName": "test_2",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        208,
        112
      ],
      "id": "302af422-d73c-4c3e-84fd-abd239774622",
      "name": "Extract from File1"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        480,
        32
      ],
      "id": "567aded2-d59e-4d62-b6d4-12315ebf57d1",
      "name": "Merge"
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst binary = {};\nitems.forEach((item, i) => {\n  const key = Object.keys(item.binary)[0];\n  binary[`data${i + 1}`] = item.binary[key];\n});\n\nreturn [{ json: {}, binary }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        896,
        32
      ],
      "id": "bfaaa64a-7477-4b91-8abe-bd081842a135",
      "name": "Code in JavaScript"
    }
  ],
  "connections": {
    "On form submission": {
      "main": [
        [
          {
            "node": "Extract from File1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File1": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "cf4367492d34bb4e3c07a58320944bd2f74a2f520740b248009864d36f47bda6"
  }
}
</details>

Expected behavior

I expect form ending to work with multiple files as other actions like for example compress do.

Debug Info

Debug info

core

  • n8nVersion: 2.17.4
  • platform: npm
  • nodeJsVersion: 24.14.0
  • nodeEnv: undefined
  • database: sqlite
  • executionMode: regular
  • concurrency: -1
  • license: enterprise (production)
  • consumerId: 502590b8-30aa-4025-8431-7bef61aa62b5

storage

  • success: all
  • error: all
  • progress: false
  • manual: true
  • binaryMode: filesystem

pruning

  • enabled: true
  • maxAge: 336 hours
  • maxCount: 10000 executions

client

  • userAgent: mozilla/5.0 (windows nt 10.0; win64; x64; rv:149.0) gecko/20100101 firefox/149.0
  • isTouchDevice: false

security

  • secureCookie: false

Generated at: 2026-04-23T13:35:10.776Z

Operating System

Debian 13

n8n Version

2.17.4

Node.js Version

24.14.0

Database

SQLite (default)

Execution mode

main (default)

Hosting

self hosted

extent analysis

TL;DR

The issue can be resolved by modifying the inputDataFieldName in the form closing action to accept multiple binary files.

Guidance

  • Verify that the inputDataFieldName is set to a single field name (e.g., data1) when downloading a single file, and it works as expected.
  • When downloading multiple files, try setting inputDataFieldName to a comma-separated list of field names (e.g., data1, data2) and check if it resolves the issue.
  • If the above step doesn't work, inspect the binary object in the custom code node to ensure it contains the expected binary data for multiple files.
  • Check the n8n version and Node.js version for any known issues or compatibility problems.

Example

No code example is provided as the issue seems to be related to the configuration of the form closing action.

Notes

The issue might be specific to the n8n version (2.17.4) or Node.js version (24.14.0) being used. It's recommended to check the n8n documentation and release notes for any known issues or updates related to handling multiple binary files.

Recommendation

Apply a workaround by modifying the inputDataFieldName in the form closing action to accept multiple binary files, as this seems to be the most likely cause of the issue.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

I expect form ending to work with multiple files as other actions like for example compress do.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING