【问题标题】:Fetch binary file using node-fetch and send to react as binary data使用 node-fetch 获取二进制文件并发送以响应二进制数据
【发布时间】:2021-10-05 11:14:56
【问题描述】:

我正在尝试在我的反应应用程序中预览图像。我正在尝试使用 node-fetch 将二进制数据作为流获取,并在响应时将响应数据发送回以使用正确的内容类型对应用程序做出反应。反应代码工作正常,因为我已经通过直接点击 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 工作正常,但它对图像的失败(损坏二进制数据)。使用上面的代码,我正在接收二进制数据,但数据似乎也已损坏。当我尝试使用相同的反应创建 objectUrl 时,它不会在浏览器中显示正确的文件。

【问题讨论】:

    标签: node.js node-fetch


    【解决方案1】:

    使用 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
          );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-04
      • 2016-07-03
      • 2018-09-24
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多