Я пишу сервер node.js
, где я принимаю файл вместе с контрольной суммой CRC32 по многопрофильному запросу. Я использую модули узлов busboy
и crc
для обработки многочастных запросов и операций CRC в узле.Контрольная сумма CRC32 не вычисляется в node.js
В случае busboy
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
и считываю байты, изображение считывается, поэтому файл уже существует.
Любая идея, в чем проблема?
Если busboy передает запись в поток fs, знает ли он, когда это делается? – dandavis
Я не уверен. Я думаю, @tgo имеет правильные вещи. Я попытаюсь написать файл синхронно и проверить, исправляет ли это проблему. –