У меня есть следующая функция, которая вызывается дважды подряд.
writeStream(readStream, options) {
const { isTemp, mimetype, onFinish } = options;
const match = FILE_EXTENSION_FROM_CONTENT_TYPE.exec(mimetype);
const fileExtension = match && match[1] ? match[1] : "octet-stream";
const name = uuid() + "." + fileExtension;
const filePath = isTemp ? this.tempFilesRoot + name : this.filesRoot + name;
const writeStream = fs.createWriteStream(filePath, options);
writeStream.on("close", () => {
console.log(writeStream.path + "\n"); < test
console.log(name); < test
if (onFinish) {
onFinish(name);
}
});
readStream.pipe(writeStream);
}
следующий результат:
Проблема в том, что обработчик события close
вызывается дважды с одними и теми же параметрами закрытия, которые являются name
и writeStream
ПЕРВОГО файла. Файлы сохраняются нормально, без проблем. Более того, если я заменю on
на once
, обработчик вызывается один раз с теми же параметрами. Хотя мой код не генерирует эти два readStream
, они разные.
Изменить:
Вот код вызова (я использую busboy для обработки синтаксического анализа формы):
handler.on("file", function (fieldname, stream, filename, encoding, mimetype) {
Logger.logInfo(`Started receiving file '${filename}', field name '${fieldname}'`);
// Here I call the function above
const tempFileName = FilesManager.writeStream(stream, {
mimetype,
emitClose: true,
isTemp: true,
onFinish: function () {
Logger.logSuccess(`Finished receiving file '${filename}'`, {
config: "requests",
prefix: "FORM_HANDLER",
});
req.receivedFiles.push(tempFileName);
req.formData[fieldname] = {
type: FORM_FIELD_TYPE.FILE,
val: tempFileName,
};
}
});
});