mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 09:36:44 +00:00
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import type { IExecuteFunctions, IDataObject, INodeExecutionData } from 'n8n-workflow';
|
|
|
|
import { apiRequest } from '../../../transport';
|
|
|
|
export async function download(this: IExecuteFunctions, index: number) {
|
|
const body: IDataObject = {};
|
|
const requestMethod = 'GET';
|
|
const items = this.getInputData();
|
|
|
|
//meta data
|
|
const fileId: string = this.getNodeParameter('fileId', index) as string;
|
|
const output: string = this.getNodeParameter('output', index) as string;
|
|
|
|
//endpoint
|
|
const endpoint = `files/${fileId}/`;
|
|
|
|
//response
|
|
const response = await apiRequest.call(this, requestMethod, endpoint, body, {} as IDataObject, {
|
|
encoding: null,
|
|
json: false,
|
|
resolveWithFullResponse: true,
|
|
});
|
|
|
|
let mimeType = response.headers['content-type'] as string | undefined;
|
|
mimeType = mimeType ? mimeType.split(';').find((value) => value.includes('/')) : undefined;
|
|
const contentDisposition = response.headers['content-disposition'];
|
|
const fileNameRegex = /(?<=filename=").*\b/;
|
|
const match = fileNameRegex.exec(contentDisposition as string);
|
|
let fileName = '';
|
|
|
|
// file name was found
|
|
if (match !== null) {
|
|
fileName = match[0];
|
|
}
|
|
|
|
const newItem: INodeExecutionData = {
|
|
json: items[index].json,
|
|
binary: {},
|
|
};
|
|
|
|
if (items[index].binary !== undefined && newItem.binary) {
|
|
// Create a shallow copy of the binary data so that the old
|
|
// data references which do not get changed still stay behind
|
|
// but the incoming data does not get changed.
|
|
Object.assign(newItem.binary, items[index].binary);
|
|
}
|
|
|
|
newItem.binary = {
|
|
[output]: await this.helpers.prepareBinaryData(
|
|
response.body as unknown as Buffer,
|
|
fileName,
|
|
mimeType,
|
|
),
|
|
};
|
|
|
|
return [newItem as unknown as INodeExecutionData[]];
|
|
}
|