JavaScript通过文件地址获取文件名称
在 JavaScript 中,可以通过文件链接地址提取文件名称。文件名称通常是链接中最后一个 / 之后的部分,可能还包含查询参数或哈希片段。以下是几种常见的提取文件名称的方法:
方法 1:使用 URL 对象和 pathname
URL 对象可以解析链接地址,并通过 pathname 获取路径部分,然后提取文件名。
代码示例:
function getFileNameFromUrl(url) {// 创建 URL 对象const urlObj = new URL(url);// 获取路径部分(例如:/path/to/file.pdf)const pathname = urlObj.pathname;// 提取文件名(最后一个 / 之后的部分)const fileName = pathname.substring(pathname.lastIndexOf('/') + 1);return fileName;
}// 示例
const url = "https://example.com/path/to/file.pdf?query=123#section";
const fileName = getFileNameFromUrl(url);
console.log(fileName); // 输出:file.pdf
方法 2:使用 split 和 pop
通过 split 方法将链接地址按 / 分割成数组,然后使用 pop 获取最后一个部分。
代码示例:
function getFileNameFromUrl(url) {// 去掉查询参数和哈希片段const cleanUrl = url.split('?')[0].split('#')[0];// 按 / 分割路径,获取最后一个部分const fileName = cleanUrl.split('/').pop();return fileName;
}// 示例
const url = "https://example.com/path/to/file.pdf?query=123#section";
const fileName = getFileNameFromUrl(url);
console.log(fileName); // 输出:file.pdf
方法 3:使用正则表达式
通过正则表达式匹配文件名部分。
代码示例:
function getFileNameFromUrl(url) {// 匹配最后一个 / 之后的部分(不包括查询参数和哈希片段)const regex = /\/([^\/?#]+)[^\/]*$/;const match = url.match(regex);// 如果匹配成功,返回文件名return match ? match[1] : null;
}// 示例
const url = "https://example.com/path/to/file.pdf?query=123#section";
const fileName = getFileNameFromUrl(url);
console.log(fileName); // 输出:file.pdf
方法 4:处理带有查询参数或哈希片段的情况
如果文件名可能包含查询参数或哈希片段,可以通过以下方法提取纯净的文件名。
代码示例:
function getFileNameFromUrl(url) {// 创建 URL 对象const urlObj = new URL(url);// 获取路径部分const pathname = urlObj.pathname;// 提取文件名(最后一个 / 之后的部分)const fileNameWithParams = pathname.substring(pathname.lastIndexOf('/') + 1);// 去掉查询参数和哈希片段const fileName = fileNameWithParams.split('?')[0].split('#')[0];return fileName;
}// 示例
const url = "https://example.com/path/to/file.pdf?query=123#section";
const fileName = getFileNameFromUrl(url);
console.log(fileName); // 输出:file.pdf
方法 5:处理没有文件名的链接
如果链接地址没有文件名(例如以 / 结尾),可以返回一个默认值或空字符串。
代码示例:
function getFileNameFromUrl(url) {const urlObj = new URL(url);const pathname = urlObj.pathname;// 如果路径以 / 结尾,返回空字符串或默认值if (pathname.endsWith('/')) {return ''; // 或者 return 'index.html';}// 提取文件名const fileName = pathname.substring(pathname.lastIndexOf('/') + 1);return fileName;
}// 示例
const url1 = "https://example.com/path/to/file.pdf";
const url2 = "https://example.com/path/to/";console.log(getFileNameFromUrl(url1)); // 输出:file.pdf
console.log(getFileNameFromUrl(url2)); // 输出:'' 或 'index.html'
总结
提取文件名称的常用方法包括:
- 使用
URL对象和pathname:推荐使用,兼容性好。 - 使用
split和pop:简单直接,适合大多数场景。 - 使用正则表达式:灵活,适合复杂场景。
- 处理查询参数和哈希片段:确保提取的文件名是纯净的。
根据你的需求选择合适的方法即可。
相关文章:
JavaScript通过文件地址获取文件名称
在 JavaScript 中,可以通过文件链接地址提取文件名称。文件名称通常是链接中最后一个 / 之后的部分,可能还包含查询参数或哈希片段。以下是几种常见的提取文件名称的方法: 方法 1:使用 URL 对象和 pathname URL 对象可以解析链接…...
MySQL 优化方案
一、MySQL 查询过程 MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器,再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作,包括连接管理、查询解析、优化、执行和结果返回等。 1.1 查询过程的关键组件 连接管理器:管理…...
智能对话小程序功能优化day1-登录鉴权
目录 1.数据库表构建。 2.完善登录相关的实例对象。 3.登录相关功能实现。 4.小程序效果。 最近尝试下trae加入claude3.7后的读图生成代码功能,可以看到简单的页面一次性生成确实准确率高了不少,想起来之前笔记中开发的智能问答小程序功能还是有些简…...
【架构艺术】Go语言微服务monorepo的代码架构设计
近期因为项目架构升级原因,笔者着手调研一些go项目monorepo的代码架构设计,目标是长期把既有微服务项目重要的部分都转移到monorepo上面,让代码更容易维护,协作开发更加方便。虽然经验不多,但既然有了初步的调研&#…...
MinIO的预签名直传机制
我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口,然后我们在前端调用这些接口完成文件的上传下载机制,但是,当并发量过大,频繁访问会对后端的并发往往会对服务器造成极大的压力…...
谈谈List,Set,Map的区别
List、Set 和 Map 是 Java 集合框架(Java Collections Framework)中的三种主要接口,它们各自有不同的特点和用途。以下是它们的区别和使用场景的详细解释: 1. List(列表) 1.1 特点 有序集合:Li…...
投资晚报 3.12
一、 晚间要闻 1、CME美联储观察:美联储3月降息25个基点的概率为3% 3 月 12 日,据 CME「美联储观察」数据,美联储 3 月降息 25 个基点的概率为 3%,维持不变的概率为 97%。 2、美国劳工统计局将于今晚20:30公布2月CPI数据 3 月…...
蓝桥 2109统计子矩阵
问题描述 给定一个NM 的矩阵 A, 请你统计有多少个子矩阵 (最小 11, 最大 NM) 满足子矩阵中所有数的和不超过给定的整数 K ? 输入格式 第一行包含三个整数 N,M 和 K. 之后 NN 行每行包含 M 个整数, 代表矩阵 A. 输出格式 一个整数代表答案。 样例输入 3 4 10 1 2 3 4 5…...
Qt开源控件库(qt-material-widgets)的编译及使用
项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址:qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图: 直接使用Qt Crea…...
vue的 props 与 $emit 以及 provide 与 inject 的 组件之间的传值对比
好的,下面是 props 与 $emit 以及 provide 与 inject 的对比: 1. props 与 $emit props:父组件通过 props 向子组件传递数据,子组件接收后不可修改。子组件只能读取 props 传递给它的数据。如果需要修改或更新父组件的状态&#…...
用python批量生成文件夹
问题描述 当批量生成文件夹时,手动右键创建文件夹是一个繁琐的过程,尤其是文件夹的命名过程。假设从3月10日到3月19日,每天要为某个日常工作创建一个名为2025031x的文件夹,手动创建文件夹并命名费时费力。 百度给出了以下四种方法…...
Json 转义符号处理(Mongo changeStream op log)
使用mongo-kafka组件订阅mongo的changeStream得到 一个带有很多转义符号的json字符串 "{\"_id\": {\"_data\": \"8267D0F733000001502B022C0100296E5A1004366730C56F7E41A790BDA4CF23259A4F46645F6964006467B91713A024A00E32CDF6800004\"},…...
懒加载(Lazy Loading):原理、实现与优化策略
懒加载(Lazy Loading) 是一种优化网页性能的技术,主要用于延迟加载非关键资源(如图片、视频、脚本等),直到它们真正需要被使用时才加载。懒加载可以显著减少页面初始加载时间,降低带宽消耗&…...
dns劫持是什么?常见的劫持类型有哪些?如何预防?
DNS劫持的定义 DNS劫持(Domain Name System Hijacking)是一种网络攻击手段,攻击者通过篡改域名解析的过程,将用户对某个域名的访问请求重定向到错误或恶意的IP地址。这种攻击可能导致用户访问到钓鱼网站、恶意广告页面࿰…...
蓝桥杯省赛真题C++B组2024-握手问题
一、题目 【问题描述】 小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但这…...
【MySQL】基本操作 —— DDL
目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…...
XML语法
一、XML简介 (一)定义 XML(eXtensible Markup Language,可扩展标记语言)是一种简单的文本格式,用于标记电子文件使其具有结构性的标记语言。它与HTML(HyperText Markup Language,超…...
游戏引擎学习第152天
仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾昨天的内容 这个节目展示了我们如何从零开始制作一款完整的游戏。我们不使用任何游戏引擎或库,而是从头开始创建一款游戏,整个开发过程都会呈现给大家。你将能够看到每一行代码的编写,了解…...
考研数学非数竞赛复习之Stolz定理求解数列极限
在非数类大学生数学竞赛中,Stolz定理作为一种强大的工具,经常被用来解决和式数列极限的问题,也被誉为离散版的’洛必达’方法,它提供了一种简洁而有效的方法,使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…...
故障诊断——neo4j入门
文章目录 neo4jQuickStartDemo neo4j QuickStart 详情可见博客:https://www.cnblogs.com/nhdlb/p/18703804,使用docker拉取最近的一个版本进行创建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…...
【CXX】6.2 str — rust::Str
Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...
【JavaWeb】快速入门——HTMLCSS
文章目录 一、 HTML简介1、HTML概念2、HTML文件结构3、可视化网页结构 二、 HTML标签语法1、标题标签2、段落标签3、超链接4、换行5、无序列表6、路径7、图片8、块1 盒子模型2 布局标签 三、 使用HTML表格展示数据1、定义表格2、合并单元格横向合并纵向合并 四、 使用HTML表单收…...
unordered_set 的常用函数
在 C 的标准库中,std::unordered_set 是基于哈希表实现的哈希集合。下面介绍这种语言里哈希集合的常用函数。 C std::unordered_set 1. 元素操作 insert 功能:向哈希集合中插入元素。如果元素已经存在,则不会重复插入。示例代码:…...
若依框架-给sys_user表添加新字段并获取当前登录用户的该字段值
目录 添加字段 修改SysUser类 修改SysUserMapper.xml 修改user.js 前端获取字段值 添加字段 若依框架的sys_user表是没有age字段的,但由于业务需求,我需要新添加一个age字段: 修改SysUser类 添加age字段后,要在SysUser类 …...
前端监测窗口尺寸和元素尺寸变化的方法
前端监测窗口尺寸变化和元素尺寸变化的方法 window.resize 简介 window.resize事件是浏览器提供的一种事件,用于监听窗口大小的改变。这意味着当用户调整浏览器窗口大小时,相关的JavaScript代码将被触发执行。这为开发者提供了一种机制,可…...
angular中下载接口返回文件
目录 一、URL.createObjectURL() 一、URL.createObjectURL() createObjectURL属于js的原生方法,位于window.URL上,用于将Blob或者File文件转换为可以临时的URL地址进行显示 **注意**:Angular 的 HttpClient 默认将响应解析为 JSON 对象16。…...
ubuntu 部署deepseek
更新 apt update 升级 apt upgrade 格式化硬盘 mkfs.ext4 /dev/sdb 安装nginx 查看端口 一、安装Ollama Ollama是一个开源的大型语言模型(LLM)推理服务器,为用户提供了灵活、安全和高性能的语言模型推理解决方案。 ollama/docs/linux.m…...
【每日学点HarmonyOS Next知识】拖拽调整列表顺序、tab回弹、自定义弹窗this、状态变量修饰枚举
1、HarmonyOS 功能实现(拖拽调整列表顺序)? 可参考: import curves from ohos.curves; import Curves from ohos.curvesEntry Component struct ListItemExample {State private arr: number[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]…...
MySQL库和表的操作详解:从创建库到表的管理全面指南
目录 一、MySQL库的操作详解 〇、登录MySQL 一、数据库的创建与字符集设置 1. 创建数据库的语法 2. 创建数据库示例 查看创建出来的文件: bash下查看MySQL创建的文件 二、字符集与校验规则 1. 查看系统默认设置 2. 查看支持的字符集与校验规则 3. 校验规则对查询的影响…...
PyTorch 系列教程:使用CNN实现图像分类
图像分类是计算机视觉领域的一项基本任务,也是深度学习技术的一个常见应用。近年来,卷积神经网络(cnn)和PyTorch库的结合由于其易用性和鲁棒性已经成为执行图像分类的流行选择。 理解卷积神经网络(cnn) 卷…...
