Контрольная сумма CRC32 не вычисляется в node.js

Я пишу node.js сервер, на котором я принимаю файл вместе с контрольной суммой CRC32 в составном запросе. я использую busboy а также crc модули узла для обработки многочастных запросов и операций CRC в узле.

в busboy"s finish В этом случае я пытаюсь вычислить контрольную сумму CRC32 сохраненного файла и сравнить ее с полученной контрольной суммой.

Моя проблема в том, что в finish В этом случае контрольная сумма всегда рассчитывается как 0. Если я вручную запускаю контрольную сумму CRC32 для того же файла, контрольная сумма вычисляется правильно.

Вот фрагмент кода, который я использую для обработки многочастного запроса с вычислением crc32:

var busboy = new Busboy({ headers : request.headers});
var saveTo;
var crc32;
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
    saveTo = path.join('files', '/', filename);
    file.pipe(fs.createWriteStream(saveTo));
});

busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated) {
    if(fieldname == 'checksum') {
        crc32 = val;
    }
});

busboy.on('finish', function() {
    var savedFileCrc32 = crc.crc32(fs.readFileSync(saveTo)).toString(16);
    console.log("CRC32 of saved file: " + savedFileCrc32 + " file: " + saveTo);
});
request.pipe(busboy);

Моя консоль всегда печатает CRC32 of saved file: 0 file: files/image.jpg

Однако, если я запускаю программу узла для вычисления контрольной суммы CRC32 только что созданного файла, она отлично работает и печатает контрольную сумму.

Изображение также сохраняется должным образом. в finish событие, если я открою поток чтения наsaveTo и считывать байты, изображение читается, поэтому файл уже существует.

Есть идеи, в чем может быть проблема?

1 ответ

Решение

Единственное, о чем я могу думать, это то, что запись не закончена к тому времени, когда вы делаете readFileSync(), Можете ли вы проверить, существует ли файл перед чтением?

Мне также интересно, если это на самом деле не дубликат этого.

Другие вопросы по тегам