我正在编写代码以在Node.js环境中通过HTTP / HTTPS读取任意Web资源,并且我希望以文本数据形式返回内容为字符串,而以二进制数据形式返回内容为Buffer。
很明显,以text
开头的任何内容(例如text/html
)都是文本数据最好以字符串形式返回-当然,使用适当的字符编码也可以明确定义(例如{ {1}}),也可能不是。此外,text/html; charset=utf-8
的任何显式定义都将指示内容是文本,而不是二进制文件,而与MIME类型无关。
据我所知,几乎其他所有内容都是二进制数据。我知道的所有音频和视频格式都是二进制的,几乎每种图像类型都是charset
除外。似乎大多数image/svg+xml
类型都是二进制的,但是有一些值得注意的常见例外,例如application/...
。
以下功能似乎足以确定问题吗?如果没有,我可能会缺少哪些值得注意的例外?
application/json
答案 0 :(得分:0)
好吧,您可以在从URL提取的缓冲区上使用textorbinary格式。
例如在lambda中,您将:
const fetch = require('node-fetch');
const { isText, isBinary, getEncoding } = require('istextorbinary');
module.exports.handler = async (event, context, callback) => {
.
.
const customUrl = 'www.abc.net.au';
const url = `https://${customUrl}${event.path}`;
// Request with GET/HEAD method cannot have body | undefined
// Set fetch parameters in params
var params = {};
if (event.httpMethod === 'GET' || event.httpMethod === 'HEAD') {
params = {
method: event.httpMethod,
headers: customRequestHeader
};
} else {
params = {
method: event.httpMethod,
headers: customRequestHeader,
body: JSON.stringify(parsedbody)
};
}
console.debug('request params: ' + JSON.stringify(params));
// Fetch URL with params
const response = await fetch(url, params);
var textResponse = await response.buffer();
var isBase64EncodedValue = false;
if ( isBinary(null, textResponse) ) {
console.log('textResponse is a binary blob - setting isBase64Encoded to true on returnResponse');
isBase64EncodedValue = true;
console.log('isBase64EncodedValue in returnResponse is: ' + isBase64EncodedValue);
// We need to return binary base64 encoded data for binary files - otherwise APIGW will throw 500 error back to the user
textResponse = textResponse.toString('base64');
// If you need to convert it back you could do something like - textResponse.toString('binary')
console.log('When isBase64EncodedValue is true, textResponse is: ' + textResponse);
} else {
console.log('textResponse is not a binary blob - setting isBase64Encoded to false on returnResponse');
isBase64EncodedValue = false;
console.log('isBase64EncodedValue in returnResponse is: ' + isBase64EncodedValue);
textResponse = textResponse.toString('utf8');
console.log('When isBase64EncodedValue is false, textResponse is: ' + textResponse);
}
.
.
};
您最终使用了功能吗? 想分享您的最终代码吗?