javascript - NodeJS sendFile 从服务器返回空文件

标签 javascript node.js reactjs pdf axios

服务器端

我尝试从 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");
 })

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

最佳答案

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

服务器默认返回流,为了在客户端上保存文件,响应需要是 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);
});

关于javascript - NodeJS sendFile 从服务器返回空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51785968/

相关文章:

javascript - 在 CKEditor 的对话框中隐藏文本输入

javascript - 即使在 React 中正确导入后也不包含默认导出

reactjs - 未找到模块 : Error: Can't resolve 'pnpapi' in '/app/node_modules/next/dist/lib'

javascript - jquery 中的数据表不显示打印按钮

javascript - 创建 Wordpress 插件并加载外部脚本

javascript - 如何更改此 "snow script"中雪的颜色

javascript - 将 Nodejs 中 MongoDB 返回的 JSON 数组中的 UTC 日期转换为本地时间的有效方法

node.js - 如何使用 Node 和 Express 建立客户/客户风格的子域

javascript - 带有 ObjectId 的 Mongoose 中的嵌套数组

javascript - 将第一个元素保存到待办事项数组中时出现问题