NodeJS / Express4端点生成损坏的xlsx文件

时间:2015-12-14 20:13:10

标签: angularjs node.js express

我正在尝试使用NodeJS / express 4创建一个端点,该端点生成并向用户发送xlsx文件。

要创建xlsx文件,我使用的是node-xlsx库。

var xlsx = require('node-xlsx');
var buffer = xlsx.build([{
  name: pasta,
  data: data
}]);
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader("Content-Disposition", "attachment; filename=" + pasta + ".xlsx");
res.write(buffer, 'binary');
return res.end();

我正在尝试通过Angular应用程序下载此文件。

$http.post('https://endpoint/v1/' + folderName + '/reportExcel', {
    responseType: 'arraybuffer'
  })
  .success(function(response) {
      var blob = new Blob([response], {
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
      });
      var objectUrl = URL.createObjectURL(blob);
      $window.open(objectUrl);

但是,正在下载的文件已损坏,因此无法打开它。

2 个答案:

答案 0 :(得分:5)

可能因为您使用的是connect-livereload插件吗?该插件似乎导致损坏的二进制文件被传输。我遇到了同样的问题,并通过添加“忽略”来解决这个问题。当启动connect-livereload插件时。

app.use(require('connect-livereload')({
    ignore:['.xls', '.xlsx']
}));

有关详细信息,请参阅此帖:https://github.com/intesso/connect-livereload/issues/39

答案 1 :(得分:0)

我在这里发了一个答案:https://stackoverflow.com/a/41103999/1623249

基本上,您需要从node-xlsx获取缓冲区,将其转换为base64,然后在客户端中对其进行解码。