Узел записывает поврежденные файлы .xlsx после загрузки

Я использую модуль «xlsx» на стороне сервера. Мой сервер получает файлы .xlsx от клиента. Он отлично работает, когда файл загружается с несколькими частями. Но когда я пытаюсь загрузить файлы с 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 Диске действительны. После написания их с помощью узла я не могу их открыть. Ошибка, которую я получаю

\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 ?

person Vitaliy Rokossovyk    schedule 02.11.2016    source источник
comment
Можете ли вы переименовать файл .xlsx в .zip и открыть его с помощью программы архивации? Если это не работает, попробуйте открыть его в текстовом редакторе и найдите строку, которой не должно быть в первой или последней строке. Как предупреждение от узла, которое случайно записывается в файл.   -  person Daniel W.    schedule 02.11.2016
comment
Не могу его открыть архивной программой и там нет таких укусов   -  person Vitaliy Rokossovyk    schedule 02.11.2016
comment
ты нашел решение? такая же проблема с библиотекой exceljs при чтении из файла   -  person Geek Guy    schedule 22.03.2019


Ответы (1)


При использовании модулей xlsx и exceljs как writeFileSync, так и readFileSync должны быть промисами, и вы должны дождаться их разрешения, прежде чем выполнять следующую операцию.

person Gaurav    schedule 20.04.2019