diff --git a/packages/core/src/NodeExecuteFunctions.ts b/packages/core/src/NodeExecuteFunctions.ts index 5b6920303fcc4..b0603de25996c 100644 --- a/packages/core/src/NodeExecuteFunctions.ts +++ b/packages/core/src/NodeExecuteFunctions.ts @@ -1011,9 +1011,10 @@ async function prepareBinaryData( if (binaryData instanceof IncomingMessage) { if (!filePath) { try { + const { responseUrl } = binaryData; filePath = binaryData.contentDisposition?.filename ?? - new URL(binaryData.responseUrl).pathname.slice(1); + ((responseUrl && new URL(responseUrl).pathname) ?? binaryData.req?.path)?.slice(1); } catch {} } if (!mimeType) { diff --git a/packages/nodes-base/nodes/HttpRequest/V1/HttpRequestV1.node.ts b/packages/nodes-base/nodes/HttpRequest/V1/HttpRequestV1.node.ts index c620d4757939f..f1db2e33ae850 100644 --- a/packages/nodes-base/nodes/HttpRequest/V1/HttpRequestV1.node.ts +++ b/packages/nodes-base/nodes/HttpRequest/V1/HttpRequestV1.node.ts @@ -634,7 +634,7 @@ export class HttpRequestV1 implements INodeType { oAuth2Api = await this.getCredentials('oAuth2Api'); } catch {} - let requestOptions: OptionsWithUri; + let requestOptions: OptionsWithUri & { useStream?: boolean }; let setUiParameter: IDataObject; const uiParameters: IDataObject = { @@ -875,6 +875,7 @@ export class HttpRequestV1 implements INodeType { if (responseFormat === 'file') { requestOptions.encoding = null; + requestOptions.useStream = true; if (options.bodyContentType !== 'raw') { requestOptions.body = JSON.stringify(requestOptions.body); @@ -887,6 +888,7 @@ export class HttpRequestV1 implements INodeType { } } else if (options.bodyContentType === 'raw') { requestOptions.json = false; + requestOptions.useStream = true; } else { requestOptions.json = true; } diff --git a/packages/nodes-base/nodes/HttpRequest/V2/HttpRequestV2.node.ts b/packages/nodes-base/nodes/HttpRequest/V2/HttpRequestV2.node.ts index e1c3993dc69cd..c2f5a7553cc8a 100644 --- a/packages/nodes-base/nodes/HttpRequest/V2/HttpRequestV2.node.ts +++ b/packages/nodes-base/nodes/HttpRequest/V2/HttpRequestV2.node.ts @@ -674,7 +674,7 @@ export class HttpRequestV2 implements INodeType { } catch {} } - let requestOptions: OptionsWithUri; + let requestOptions: OptionsWithUri & { useStream?: boolean }; let setUiParameter: IDataObject; const uiParameters: IDataObject = { @@ -915,6 +915,7 @@ export class HttpRequestV2 implements INodeType { if (responseFormat === 'file') { requestOptions.encoding = null; + requestOptions.useStream = true; if (options.bodyContentType !== 'raw') { requestOptions.body = JSON.stringify(requestOptions.body); @@ -927,6 +928,7 @@ export class HttpRequestV2 implements INodeType { } } else if (options.bodyContentType === 'raw') { requestOptions.json = false; + requestOptions.useStream = true; } else { requestOptions.json = true; } diff --git a/packages/workflow/src/index.ts b/packages/workflow/src/index.ts index 8ddd0e413b3a8..ff6b1d7316f1c 100644 --- a/packages/workflow/src/index.ts +++ b/packages/workflow/src/index.ts @@ -57,7 +57,11 @@ declare module 'http' { rawBody: Buffer; readRawBody(): Promise; _body: boolean; + // This gets added by the `follow-redirects` package - responseUrl: string; + responseUrl?: string; + + // This is added to response objects for all outgoing requests + req?: ClientRequest; } }