节点在下载后写入损坏的.xlsx文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节点在下载后写入损坏的.xlsx文件相关的知识,希望对你有一定的参考价值。
我在服务器端使用“xlsx”模块。我的服务器从客户端获取.xlsx文件。使用multipart上传文件时效果很好。但是,当我尝试从Google云端硬盘或Dropbox下载文件时,我总是会收到损坏的.xlsx文件。
从Google云端硬盘下载文件的功能。
service.files.get({
auth: auth,
fileId: fileId,
alt: 'media'
}, function (err, response) {
if (err) {
res.status(400).json({message: "Error while downloading"});
} else {
fs.writeFileSync(req.body.fileName, response);
var data = xlsParser.parse(fs.readFileSync(req.body.fileName));
res.json(data);
}
});
解析器代码
module.exports = {
parse: function (file) {
var workSheet = xlsx.read(file, {});
return Object.keys(workSheet.Sheets).map(function(name) {
var sheet = workSheet.Sheets[name];
return {name, data: xlsx.utils.sheet_to_json(sheet, {raw: false})}
})
}}
Google云端硬盘中的文件有效。用节点写它们之后我无法打开它们。我得到的错误
ode_modulesjsziplibdataReader.js:25
throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?");
^
Error: End of data reached (data length = 1771452, asked index = 1771464). Corrupted zip ?
答案
在使用xlsx和exceljs模块时,writeFileSync和readFileSync都必须是promise,您应该等待它们在执行下一个操作之前解析。
以上是关于节点在下载后写入损坏的.xlsx文件的主要内容,如果未能解决你的问题,请参考以下文章