feat(core): Allow customizing max file size in form-data payloads for webhooks (#10857)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™ 2024-09-17 15:55:51 +02:00 committed by GitHub
parent aa00d9c2ae
commit a3335e0ecd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 8 additions and 0 deletions

View file

@ -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;

View file

@ -176,6 +176,7 @@ describe('GlobalConfig', () => {
formTest: 'form-test',
formWaiting: 'form-waiting',
payloadSizeMax: 16,
formDataFileSizeMax: 200,
rest: 'rest',
webhook: 'webhook',
webhookTest: 'webhook-test',

View file

@ -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) => {