mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-25 19:41:14 -08:00
fix(HTTP Request Node): Detect mime-type from streaming responses (#5896)
This commit is contained in:
parent
d1945d9b72
commit
69efde7a09
|
@ -76,6 +76,7 @@ import {
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
import { Agent } from 'https';
|
import { Agent } from 'https';
|
||||||
|
import { IncomingMessage } from 'http';
|
||||||
import { stringify } from 'qs';
|
import { stringify } from 'qs';
|
||||||
import type { Token } from 'oauth-1.0a';
|
import type { Token } from 'oauth-1.0a';
|
||||||
import clientOAuth1 from 'oauth-1.0a';
|
import clientOAuth1 from 'oauth-1.0a';
|
||||||
|
@ -934,15 +935,17 @@ export async function copyBinaryFile(
|
||||||
fileExtension = fileTypeData.ext;
|
fileExtension = fileTypeData.ext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!mimeType) {
|
if (!fileExtension && mimeType) {
|
||||||
// Fall back to text
|
|
||||||
mimeType = 'text/plain';
|
|
||||||
}
|
|
||||||
} else if (!fileExtension) {
|
|
||||||
fileExtension = extension(mimeType) || undefined;
|
fileExtension = extension(mimeType) || undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mimeType) {
|
||||||
|
// Fall back to text
|
||||||
|
mimeType = 'text/plain';
|
||||||
|
}
|
||||||
|
|
||||||
const returnData: IBinaryData = {
|
const returnData: IBinaryData = {
|
||||||
mimeType,
|
mimeType,
|
||||||
fileType: fileTypeFromMimeType(mimeType),
|
fileType: fileTypeFromMimeType(mimeType),
|
||||||
|
@ -981,24 +984,31 @@ async function prepareBinaryData(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: detect filetype from streams
|
if (!mimeType) {
|
||||||
if (!mimeType && Buffer.isBuffer(binaryData)) {
|
if (Buffer.isBuffer(binaryData)) {
|
||||||
// Use buffer to guess mime type
|
// Use buffer to guess mime type
|
||||||
const fileTypeData = await FileType.fromBuffer(binaryData);
|
const fileTypeData = await FileType.fromBuffer(binaryData);
|
||||||
if (fileTypeData) {
|
if (fileTypeData) {
|
||||||
mimeType = fileTypeData.mime;
|
mimeType = fileTypeData.mime;
|
||||||
fileExtension = fileTypeData.ext;
|
fileExtension = fileTypeData.ext;
|
||||||
|
}
|
||||||
|
} else if (binaryData instanceof IncomingMessage) {
|
||||||
|
mimeType = binaryData.headers['content-type'];
|
||||||
|
} else {
|
||||||
|
// TODO: detect filetype from other kind of streams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!mimeType) {
|
if (!fileExtension && mimeType) {
|
||||||
// Fall back to text
|
|
||||||
mimeType = 'text/plain';
|
|
||||||
}
|
|
||||||
} else if (!fileExtension) {
|
|
||||||
fileExtension = extension(mimeType) || undefined;
|
fileExtension = extension(mimeType) || undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mimeType) {
|
||||||
|
// Fall back to text
|
||||||
|
mimeType = 'text/plain';
|
||||||
|
}
|
||||||
|
|
||||||
const returnData: IBinaryData = {
|
const returnData: IBinaryData = {
|
||||||
mimeType,
|
mimeType,
|
||||||
fileType: fileTypeFromMimeType(mimeType),
|
fileType: fileTypeFromMimeType(mimeType),
|
||||||
|
|
Loading…
Reference in a new issue