我想在 node.js 中编写一个返回二进制数据的 Lambda 函数。我希望响应标头为“application/octet-stream”,但这并不是绝对必要的。
响应头似乎始终是“application/json”,并且没有任何方法可以更改它。
回调函数的文档说:“回调函数有两个参数:一个错误和一个响应。响应对象必须与 JSON.stringify 兼容。”
我不希望任何人“字符串化”我的数据或将其转换为 JSON。我只想按原样返回字节缓冲区。
我认为您有两个选择,返回一个 base64 编码的字符串或重定向到包含二进制 blob 的 S3。
您的响应始终是 JSON 对象,但您可以指定内容类型,并且可以使用 base64 进行编码以通过 API Gateway 发送二进制数据。
在不太了解您的代码的情况下,请考虑以下示例:
exports.handler = async (event) => {
const result = Buffer.from('Hello World!', 'utf8')
return {
statusCode: 200,
headers: {
'Content-Type': 'application/octet-stream'
},
body: result.toString('base64'), // SGVsbG8gV29ybGQh
isBase64Encoded: true
}
}
Run Code Online (Sandbox Code Playgroud)
您返回一个对象,但指定主体是一个 base64 编码的字符串,API Gateway 应将其转换为八位字节流。
您可能需要配置 API Gateway 以允许*/*媒体类型。这是一篇包含更多详细信息的文章。
另一种选择对于大型二进制对象更有意义,即将二进制对象作为文件写入 S3,然后返回statusCode: 302带有重定向 url的签名 S3 url。
像这样的东西:
exports.handler = async (event) => {
return {
statusCode: 302,
headers: {
'Location': 'http://example.com/example.png'
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6646 次 |
| 最近记录: |