Контрольная сумма 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()
, Можете ли вы проверить, существует ли файл перед чтением?
Мне также интересно, если это на самом деле не дубликат этого.