2015-12-14 65 views
4

我正在嘗試使用NodeJS/express 4創建一個端點,並生成併發送給用戶一個xlsx文件。NodeJS/Express4端點生成損壞的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); 

但是,正在下載的文件已損壞,所以無法打開它。

+1

你有沒有想過這個?我有一個類似的問題... –

+0

@MikeFielden看到我的回答下面 –

回答

5

難道是因爲您正在使用connect-livereload插件嗎?該插件似乎導致正在傳輸的損壞的二進制文件。我遇到過相同的問題,並且在啓動connect-livereload插件時通過添加「忽略」來解決此問題。

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

看到這個職位的細節:https://github.com/intesso/connect-livereload/issues/39

+0

你救了我的一天!謝謝! – Yoann

+0

謝謝youuuuuuu! 我花了8個小時的時間,如果我沒有看到我會花更多的錢 – Chipintoza