🔀 Merge branch 'webhook-multifile-fix'

This commit is contained in:
Jan Oberhauser 2021-08-29 22:54:55 +02:00
commit a251b47962
2 changed files with 54 additions and 20 deletions

View file

@ -692,7 +692,7 @@ export class Wait implements INodeType {
// @ts-ignore
const mimeType = headers['content-type'] || 'application/json';
if (mimeType.includes('multipart/form-data')) {
const form = new formidable.IncomingForm({});
const form = new formidable.IncomingForm({ multiples: true });
return new Promise((resolve, reject) => {
@ -708,20 +708,37 @@ export class Wait implements INodeType {
};
let count = 0;
for (const file of Object.keys(files)) {
for (const xfile of Object.keys(files)) {
const processFiles = [];
let multiFile = false;
if (Array.isArray(files[xfile])) {
processFiles.push(...files[xfile] as formidable.File[]);
multiFile = true;
} else {
processFiles.push(files[xfile]);
}
let binaryPropertyName = file;
let fileCount = 0;
for (const file in processFiles) {
let binaryPropertyName = xfile;
if (binaryPropertyName.endsWith('[]')) {
binaryPropertyName = binaryPropertyName.slice(0, -2);
}
if (multiFile === true) {
binaryPropertyName += fileCount++;
}
if (options.binaryPropertyName) {
binaryPropertyName = `${options.binaryPropertyName}${count}`;
}
const fileJson = (files[file] as formidable.File).toJSON() as unknown as IDataObject;
const fileContent = await fs.promises.readFile((files[file] as formidable.File).path);
const fileJson = (processFiles[file] as formidable.File).toJSON() as unknown as IDataObject;
const fileContent = await fs.promises.readFile((processFiles[file] as formidable.File).path);
returnItem.binary![binaryPropertyName] = await this.helpers.prepareBinaryData(Buffer.from(fileContent), fileJson.name as string, fileJson.type as string);
count += 1;
}
}
resolve({
workflowData: [
[

View file

@ -407,7 +407,7 @@ export class Webhook implements INodeType {
// @ts-ignore
const mimeType = headers['content-type'] || 'application/json';
if (mimeType.includes('multipart/form-data')) {
const form = new formidable.IncomingForm({});
const form = new formidable.IncomingForm({ multiples: true });
return new Promise((resolve, reject) => {
@ -423,20 +423,37 @@ export class Webhook implements INodeType {
};
let count = 0;
for (const file of Object.keys(files)) {
for (const xfile of Object.keys(files)) {
const processFiles = [];
let multiFile = false;
if (Array.isArray(files[xfile])) {
processFiles.push(...files[xfile] as formidable.File[]);
multiFile = true;
} else {
processFiles.push(files[xfile]);
}
let binaryPropertyName = file;
let fileCount = 0;
for (const file in processFiles) {
let binaryPropertyName = xfile;
if (binaryPropertyName.endsWith('[]')) {
binaryPropertyName = binaryPropertyName.slice(0, -2);
}
if (multiFile === true) {
binaryPropertyName += fileCount++;
}
if (options.binaryPropertyName) {
binaryPropertyName = `${options.binaryPropertyName}${count}`;
}
const fileJson = (files[file] as formidable.File).toJSON() as unknown as IDataObject;
const fileContent = await fs.promises.readFile((files[file] as formidable.File).path);
const fileJson = (processFiles[file] as formidable.File).toJSON() as unknown as IDataObject;
const fileContent = await fs.promises.readFile((processFiles[file] as formidable.File).path);
returnItem.binary![binaryPropertyName] = await this.helpers.prepareBinaryData(Buffer.from(fileContent), fileJson.name as string, fileJson.type as string);
count += 1;
}
}
resolve({
workflowData: [
[