【问题标题】:Node writes corrupted .xlsx files after download下载后节点写入损坏的 .xlsx 文件
【发布时间】:2019-04-21 01:18:25
【问题描述】:

我在服务器端使用“xlsx”模块。我的服务器从客户端获取 .xlsx 文件。使用多部分上传文件时效果很好。但是当我尝试从 Google Drive 或 Dropbox 下载文件时,我总是收到损坏的 .xlsx 文件。

从 Google Drive 下载文件的功能。

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 云端硬盘上的文件有效。用节点编写它们后,我无法打开它们。 我得到错误

\node_modules\jszip\lib\dataReader.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 文件重命名为.zip 并使用您的归档程序打开它?如果它不起作用,请尝试使用文本编辑器打开它并查找不应该出现在第一行或最后一行的字符串。就像来自节点的警告被意外写入文件一样。
  • 无法用archieve程序打开,也没有这样的刺痛
  • 您找到解决方案了吗?从文件读取时遇到与 exceljs 库相同的问题
  • 我的情况:xlsx 文件由于某种原因损坏。将其恢复到以前的健康版本对我有用。

标签: node.js express xlsx xls exceljs


【解决方案1】:

使用 xlsx 和 exceljs 模块时,writeFileSync 和 readFileSync 都必须是 Promise,您应该等待它们解决后再执行下一个操作。

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多