gpt4 book ai didi

node.js - XLSX 文件在通过 Restify 从 Node.js 发送到客户端时损坏

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:14 24 4
gpt4 key购买 nike

我正在做一个项目,我使用 XLSX node.js 库创建一个 excel 文件,通过 Restify 将它发送到客户端,然后我使用 FileSaver.js 库将它保存在本地计算机上。当我将 xlsx 工作簿写入后端文件时,它可以正常打开,但是,当我在客户端打开它时,它已损坏。我收到错误消息:“Excel 无法打开此文件。文件格式或文件扩展名无效。请确认文件未损坏且文件扩展名与文件格式匹配”。

这是我在后端编写和发送文件的代码:

 var wopts = { bookType:'xlsx', bookSST:false, type:'binary' };
var workbook = xlsx.write(wb, wopts);
res.send(200, workbook);

在前端,我使用 XLSX 文档中的代码:

function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i=0; i!=s.length; ++i)
view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}

saveAs(new Blob([s2ab(response.data)],{type:""}), "test.xlsx");

关于为什么这行不通的任何想法?任何帮助将非常感激。谢谢。

最佳答案

正如 Luke 在评论中提到的,您必须在发送缓冲区之前进行 base64 编码。这是使用 NPM 模块的片段 node-xlsx .

var xlsx = require('node-xlsx');

router.get('/history', function (req, res) {
var user = new User();
user.getHistory(req.user.userId, req.query.offset, req.query.limit)
.then(function (history) {
if (req.headers.contenttype && req.headers.contenttype.indexOf('excel') > -1) {
var data = [['Data', 'amount'], ['19/12/2016', '10']];
var xlsxBuffer = xlsx.build([{ name: 'History', data: data }]);
res.end(xlsxBuffer.toString('base64'));
} else {
res.send(history);
}
})
.catch(function (err) {
res.status(500).send(err);
});
});

这是使用 Angular 的前端代码:

  $scope.getXlsFile = function() {
var config = {
params: {
offset: $scope.offset,
limit: $scope.limit
},
headers: {
'contentType': 'application/vnd.ms-excel',
'responseType': 'arraybuffer'
}
};
$http.get('/api/history', config)
.then(function(res) {
var blob = new Blob([convert.base64ToArrayBuffer(res.data)]);
FileSaver.saveAs(blob, 'historial.xlsx');
})
}

其中 convert 是以下工厂:

.factory('convert', function () {
return {
base64ToArrayBuffer: function (base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
}
})

关于node.js - XLSX 文件在通过 Restify 从 Node.js 发送到客户端时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com