如何解决使用 node-fetch 获取二进制文件并发送以作为二进制数据做出反应
我正在尝试在我的 React 应用程序中预览图像。我正在尝试使用 node-fetch 以流的形式获取二进制数据,并在响应时将响应数据发送回具有适当内容类型的响应应用程序。 React 代码运行良好,因为我已经通过直接点击 API 对其进行了测试。我尝试了以下代码,但无法理解如何配置响应以发送二进制数据。
fetch(doc_preview_url,requestOptions)
.then((response) => {
res.setHeader("Content-Type",response.headers.get('content-type'));
res.send(response.status).send(response.buffer());
})
.catch((error) => {
errorHandler(error);
});
请注意,我在 Node.js 中使用 axios 尝试了此操作,但是虽然 axios 对 PDF 工作正常,但它对图像的处理却失败了(损坏了二进制数据)。使用上面的代码,我正在接收二进制数据,但数据似乎也已损坏。当我尝试使用相同的方法在 react 中创建 objectUrl 时,它不会在浏览器中显示正确的文件。
解决方法
使用 response.buffer() 代替承诺并在完成时发送响应。我的代码的问题是我在数据完成获取数据之前发送了数据。
fetch(doc_preview_url,requestOptions)
.then((response) => {
const contentType = response.headers.get("content-type");
response.buffer().then((buffer) => {
res.setHeader("Content-Type",contentType);
res.status(200).send(buffer);
});
})
.catch((error) => {
global.logger.logMethodExecutionTime(
"documentServices.previewDocument ended with error",hrstart
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。