【问题标题】:NodeJS sendFile return empty file from serverNodeJS sendFile 从服务器返回空文件
【发布时间】:2019-01-18 00:54:05
【问题描述】:

服务器端

我试图从NodeJs发送文件

/**
 * Exports data to PDF format route.
 */
app.post('/export/pdf', upload.single('imageBlob'),  function (request, response) {
  var PDF = require('./services/PdfService').PDF;
  var fileUrl = PDF.generatePDFExport(request.body, request.file.buffer);

  setTimeout(() => {
    response.sendFile(fileUrl);
  }, 200);
});

这段代码创建了一个有效的 pdf 文件(我可以在浏览器 URL 命中文件中打开它)

但是某些浏览器隐藏了弹出窗口,我想下载文件而不是打开它。

我检查客户端的响应,这是一些BLOB 的响应。

客户端

我尝试从响应中创建一个文件,但只有一个空的 pdf 文件。

return axios.post('http://172.18.0.2:8001/export/pdf', formData).then(response => {
  let  blob = new Blob([response.data]);
  FileSaver.saveAs(blob, "st-seatmap-shop.pdf");
 })

这里有什么错误?在服务器端发送文件还是在客户端保存文件?

【问题讨论】:

    标签: javascript node.js reactjs pdf axios


    【解决方案1】:

    唯一的问题是向服务器发送请求。

    默认情况下,服务器返回流,并且在客户端响应上保存文件需要是BLOB,所以我刚刚更新了请求。

    let requestOptions = {
      responseType: 'blob'
    };
    
    return axios.post('http://172.18.0.2:8001/export/pdf', formData, requestOptions).then(response => {
      let  blob = new Blob([response.data]);
      FileSaver.saveAs(blob, "st-seatmap-shop.pdf");
    }).catch(error => {
      console.log("error.response is : ", error);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-19
      • 2019-01-15
      • 1970-01-01
      • 2011-12-30
      • 2016-12-08
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      相关资源
      最近更新 更多