mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-26 05:04:05 -08:00
⚡ Add support to send multiple files with Form-Data Multipart
This commit is contained in:
parent
ff2cee467e
commit
d710909bbd
|
@ -357,7 +357,9 @@ export class HttpRequest implements INodeType {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
description: 'Name of the binary property which contains<br />the data for the file to be uploaded.',
|
description: `Name of the binary property which contains the data for the file to be uploaded.<br />
|
||||||
|
For Form-Data Multipart, multiple can be provided in the format:<br />
|
||||||
|
"sendKey1:binaryProperty1,sendKey2:binaryProperty2`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
displayName: 'Body Parameters',
|
displayName: 'Body Parameters',
|
||||||
|
@ -645,7 +647,7 @@ export class HttpRequest implements INodeType {
|
||||||
if (!contentTypesAllowed.includes(options.bodyContentType as string)) {
|
if (!contentTypesAllowed.includes(options.bodyContentType as string)) {
|
||||||
// As n8n-workflow.NodeHelpers.getParamterResolveOrder can not be changed
|
// As n8n-workflow.NodeHelpers.getParamterResolveOrder can not be changed
|
||||||
// easily to handle parameters in dot.notation simply error for now.
|
// easily to handle parameters in dot.notation simply error for now.
|
||||||
throw new Error('Sending binary data is only supported when option "Body Content Type" is set to "RAW/CUSTOM" and "FORM-DATA/MULTIPART"!');
|
throw new Error('Sending binary data is only supported when option "Body Content Type" is set to "RAW/CUSTOM" or "FORM-DATA/MULTIPART"!');
|
||||||
}
|
}
|
||||||
|
|
||||||
const item = items[itemIndex];
|
const item = items[itemIndex];
|
||||||
|
@ -654,27 +656,44 @@ export class HttpRequest implements INodeType {
|
||||||
throw new Error('No binary data exists on item!');
|
throw new Error('No binary data exists on item!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.bodyContentType === 'raw') {
|
||||||
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', itemIndex) as string;
|
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', itemIndex) as string;
|
||||||
|
if (item.binary[binaryPropertyName] === undefined) {
|
||||||
|
throw new Error(`No binary data property "${binaryPropertyName}" does not exists on item!`);
|
||||||
|
}
|
||||||
|
const binaryProperty = item.binary[binaryPropertyName] as IBinaryData;
|
||||||
|
requestOptions.body = Buffer.from(binaryProperty.data, BINARY_ENCODING);
|
||||||
|
} else if (options.bodyContentType === 'multipart-form-data') {
|
||||||
|
requestOptions.body = {};
|
||||||
|
const binaryPropertyNameFull = this.getNodeParameter('binaryPropertyName', itemIndex) as string;
|
||||||
|
const binaryPropertyNames = binaryPropertyNameFull.split(',').map(key => key.trim());
|
||||||
|
|
||||||
|
for (const propertyData of binaryPropertyNames) {
|
||||||
|
let propertyName = 'file';
|
||||||
|
let binaryPropertyName = propertyData;
|
||||||
|
if (propertyData.includes(':')) {
|
||||||
|
const propertyDataParts = propertyData.split(':');
|
||||||
|
propertyName = propertyDataParts[0];
|
||||||
|
binaryPropertyName = propertyDataParts[1];
|
||||||
|
} else if (binaryPropertyNames.length > 1) {
|
||||||
|
throw new Error('If more than one property should be send it is needed to define the in the format: "sendKey1:binaryProperty1,sendKey2:binaryProperty2"');
|
||||||
|
}
|
||||||
|
|
||||||
if (item.binary[binaryPropertyName] === undefined) {
|
if (item.binary[binaryPropertyName] === undefined) {
|
||||||
throw new Error(`No binary data property "${binaryPropertyName}" does not exists on item!`);
|
throw new Error(`No binary data property "${binaryPropertyName}" does not exists on item!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const binaryProperty = item.binary[binaryPropertyName] as IBinaryData;
|
const binaryProperty = item.binary[binaryPropertyName] as IBinaryData;
|
||||||
|
|
||||||
if (options.bodyContentType === 'raw') {
|
requestOptions.body[propertyName] = {
|
||||||
requestOptions.body = Buffer.from(binaryProperty.data, BINARY_ENCODING);
|
|
||||||
}
|
|
||||||
if (options.bodyContentType === 'multipart-form-data') {
|
|
||||||
requestOptions.body = {
|
|
||||||
file: {
|
|
||||||
value: Buffer.from(binaryProperty.data, BINARY_ENCODING),
|
value: Buffer.from(binaryProperty.data, BINARY_ENCODING),
|
||||||
options: {
|
options: {
|
||||||
filename: binaryProperty.fileName,
|
filename: binaryProperty.fileName,
|
||||||
contentType: binaryProperty.mimeType,
|
contentType: binaryProperty.mimeType,
|
||||||
},
|
},
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue