nodejs - 从 url 获取文件名

问题描述

我的 Node.js 脚本中有这种链接

148414929_307508464041827_8013797938118488137_n.mp4.m4a?_nc_ht=scontent-mxp1-1.cdninstagram.com&_nc_ohc=_--i1eVUUXoAX9lJQ-u&ccb=7-4&oe=60835C8D&oh=61973532a48cb4fb62ac6711e7eba82f&_nc_sid=fa

我正在尝试使用此代码获取名称以将其另存为音频文件,但无法从 URL 获取文件扩展名 .mp4.m4a

const filename = path.basename(data.message.voice_media.media.audio.audio_src);

如何获取文件扩展名以正确删除 URL 的最后一部分?我可以保存文件,如果我删除所需扩展名之前的部分名称,它将毫无问题地播放。

更新

正如评论中所建议的,我已经阅读了链接的问题,但就我而言,我不需要只获取文件扩展名,而是获取已包含所需音频扩展名的 URL 的第一部分,即:{ {1}}。

解决方法

我建议使用 URL() constructor(在浏览器和 Node.js 中均可使用),因为您可以确保您的 URL 有效:

const url = 'https://test.com/path/148414929_307508464041827_8013797938118488137_n.mp4.m4a?_nc_ht=scontent-mxp1-1.cdninstagram.com&_nc_ohc=_--i1eVUUXoAX9lJQ-u&ccb=7-4&oe=60835C8D&oh=61973532a48cb4fb62ac6711e7eba82f&_nc_sid=fa';

let filename = '';
try {
  filename = new URL(url).pathname.split('/').pop();
} catch (e) {
  console.error(e);
}
console.log(`filename: ${filename}`);