node.js - 错误:ENOENT:没有这样的文件或目录,取消链接
Posted
技术标签:
【中文标题】node.js - 错误:ENOENT:没有这样的文件或目录,取消链接【英文标题】:node.js - Error: ENOENT: no such file or directory, unlink 【发布时间】:2020-04-09 10:59:33 【问题描述】:我有以下函数将.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"));
);
;
【问题讨论】:
【参考方案1】:在您的 unlink()
方法中使用 util.promisify
https://***.com/a/45463672/3793648
【讨论】:
以上是关于node.js - 错误:ENOENT:没有这样的文件或目录,取消链接的主要内容,如果未能解决你的问题,请参考以下文章