1

.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"));
    });
};
4

1 に答える 1