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