【问题标题】:nodejs - get filename from urlnodejs - 从 url 获取文件名
【发布时间】:2021-06-20 08:20:15
【问题描述】:

我的 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 的最后一部分?我可以保存文件,如果我删除所需扩展名之前的名称部分,它将毫无问题地播放。

更新

正如 cmets 中所建议的,我已经阅读了链接的问题,但在我的情况下,我不需要只获取文件扩展名而是 URL 的第一部分已经包含所需的音频扩展名,即:@ 987654325@.

【问题讨论】:

  • 这能回答你的问题吗? Node.js get file extension
  • 不,它不会起作用。使用 path.extname() 将返回给我的 url 的错误部分,而不是 148414929_307508464041827_8013797938118488137_n.mp4.m4a 的文件名
  • 你有绝对网址吗? https://test.com/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 之类的东西?
  • 编辑后,您似乎不需要扩展名,而是路径名。试试这个:new URL('https://test.com/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').pathname.replace('/', '')
  • 添加了一些改进并发布。

标签: javascript node.js url filenames pathname


【解决方案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}`);

【讨论】:

  • 为什么你使用.split()而不是像评论那样替换?
  • @newbiedev 因为它不适用于您的文件不在根位置的情况。我在我的例子中特别指出了这一点。我的意思是当你没有/file.txt,而是/path/file.txt
  • 好的,输入网址类似于https://scontent-mxp1-1.cdninstagram.com/v/t69.10824-16/164227760_3862884277124080_4358374852660862001_n.mp4.m4a?_nc_ht=scontent-mxp1-1.cdninstagram.com&_nc_ohc=vsuob2J4YmYAX_eQu61&ccb=7-4&oe=6084423C&oh=1b146860997bfc0480342ffe797b7b&_nc_sid=195af5,所以我想你的解决方案会很好
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
相关资源
最近更新 更多