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

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

要创buildxlsx文件,我正在使用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); 

但是,正在下载的文件已损坏,所以无法打开。

难道是因为你正在使用connect-livereload插件吗? 该插件似乎导致正在传输损坏的二进制文件。 我遇到了同样的问题,并通过在启动connect-livereload插件时添加“忽略”来解决此问题。

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

看到这个post的细节: https : //github.com/intesso/connect-livereload/issues/39

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

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