我具有下面的功能,可以将.wav
文件转换为.mp3
。如您所见,在使用ffmpeg
模块转换音频文件之前,我已经检查了该文件是否存在,然后在转换后,我仅保留新文件并删除旧文件。但是有时控制台会向我抛出错误Error: ENOENT: no such file or directory, unlink
,这意味着我unlink
(删除)了一个不存在的文件。我不明白为什么,因为即使在转换之前我已经有一个存在检查,所以应该已经存在未链接的问题。
module.exports.convertAndMoveElastic = async (calllog) => {
let { start, sip_uri, direction, source, destination } = calllog;
const VNtimezoneOffset = 7 + new Date().getTimezoneOffset() / 60;
const startTime = new Date(start + VNtimezoneOffset * 3600000 - 60000);
const date = startTime.getDate() < 10 ? `0${startTime.getDate().toString()}` : startTime.getDate().toString();
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const month = months[startTime.getMonth()];
const year = startTime.getFullYear().toString();
sip_uri = sip_uri || (direction === 'outgoing' ? source : destination);
const [extension, domain_name] = sip_uri.split("@");
return new Promise(async (resolve, reject) => {
const links = await getLinkWithElastic(calllog);
if (!links) { return reject(); }
let file_id, filepath;
for (let link of links) {
const { callid, sipCallid, uuid, record_path } = link._source;
if (record_path) {
let recordPathArr = record_path.split('/');
file_id = recordPathArr[recordPathArr.length - 1].split('.')[0];
filepath = path.resolve(base_directory, domain_name, 'archive', year, month, date, `${file_id}.wav`);
}
if (!file_id || !fs.existsSync(filepath)) {
file_id = callid;
filepath = path.resolve(base_directory, domain_name, 'archive', year, month, date, `${file_id}.wav`);
}
if (!file_id || !fs.existsSync(filepath)) {
file_id = uuid;
filepath = path.resolve(base_directory, domain_name, 'archive', year, month, date, `${file_id}.wav`);
}
if (fs.existsSync(filepath)) { break; }
}
if (!fs.existsSync(filepath)) { return reject(); }
ffmpeg(filepath)
.audioCodec('libmp3lame')
.on('error', function (error) {
reject(error);
})
.on('end', function () {
resolve({ recordUrl: `${host}/record/download/${file_id}.mp3` });
fs.unlinkSync(filepath);
})
.toFormat('mp3')
.saveToFile(path.resolve(dest_directory, file_id + ".mp3"));
});
};