diff --git a/packages/@n8n/config/src/configs/endpoints.config.ts b/packages/@n8n/config/src/configs/endpoints.config.ts index 9905d9f48a..4ec58ccf0d 100644 --- a/packages/@n8n/config/src/configs/endpoints.config.ts +++ b/packages/@n8n/config/src/configs/endpoints.config.ts @@ -65,6 +65,10 @@ export class EndpointsConfig { @Env('N8N_PAYLOAD_SIZE_MAX') payloadSizeMax: number = 16; + /** Max payload size for files in form-data webhook payloads in MiB */ + @Env('N8N_FORMDATA_FILE_SIZE_MAX') + formDataFileSizeMax: number = 200; + @Nested metrics: PrometheusMetricsConfig; diff --git a/packages/@n8n/config/test/config.test.ts b/packages/@n8n/config/test/config.test.ts index 118cf5a1bf..f7c1d48e21 100644 --- a/packages/@n8n/config/test/config.test.ts +++ b/packages/@n8n/config/test/config.test.ts @@ -176,6 +176,7 @@ describe('GlobalConfig', () => { formTest: 'form-test', formWaiting: 'form-waiting', payloadSizeMax: 16, + formDataFileSizeMax: 200, rest: 'rest', webhook: 'webhook', webhookTest: 'webhook-test', diff --git a/packages/cli/src/webhooks/webhook-helpers.ts b/packages/cli/src/webhooks/webhook-helpers.ts index 3b5ffa3466..064ef95eb1 100644 --- a/packages/cli/src/webhooks/webhook-helpers.ts +++ b/packages/cli/src/webhooks/webhook-helpers.ts @@ -6,6 +6,7 @@ /* eslint-disable prefer-spread */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ +import { GlobalConfig } from '@n8n/config'; import type express from 'express'; import formidable from 'formidable'; import get from 'lodash/get'; @@ -214,9 +215,11 @@ export async function executeWebhook( if (!binaryData) { const { contentType, encoding } = req; if (contentType === 'multipart/form-data') { + const { formDataFileSizeMax } = Container.get(GlobalConfig).endpoints; const form = formidable({ multiples: true, encoding: encoding as formidable.BufferEncoding, + maxFileSize: formDataFileSizeMax, // TODO: pass a custom `fileWriteStreamHandler` to create binary data files directly }); req.body = await new Promise((resolve) => {