当前位置: 首页 > news >正文

【项目实战】location.href 实现文件下载

应用场景

最近在项目中看到一种新的文件下载方式,原理是将[后台地址+接口地址+请求参数]拼接成一个url,直接将下载任务丢给浏览器去执行.但是在需要校验token的项目中,需要后台单独给这个接口放开token校验

location.href 相关内容

window.location.protocol: 返回当前 URL 的协议部分(例如:http: 或 https:)。
window.location.host: 返回当前 URL 的主机名和端口(例如:www.example.com:8080)。
window.location.hostname: 返回当前 URL 的主机名(例如:www.example.com)。
window.location.port: 返回当前 URL 的端口号(例如:8080)。
window.location.pathname: 返回当前 URL 的路径部分(例如:/path/to/page)。
window.location.search: 返回当前 URL 的查询字符串部分(例如:?key=value)。
window.location.hash: 返回当前 URL 的锚点部分(例如:#section1)。

代码

interface StringObject {[key: string]: string;
}const exportFile = async (params: StringObject = {}, url: string = '') => {try {const newUrl = (params: StringObject): String => {const urlParams = new URLSearchParams(params);// url是服务器地址+端口return `${window.location.protocol + "//"}${url}${'你的接口地址'}${urlParams}`;}window.location.href = newUrl()} catch (error) {console.log(error);}
};

URLSearchParams 对象

URLSearchParams 是 JavaScript 中用于处理 URL 查询字符串的一个内置对象

1.创建 URLSearchParams 实例

你可以通过传递一个查询字符串或者一个键值对数组来创建 URLSearchParams 实例。

// 使用查询字符串
const params1 = new URLSearchParams('?key1=value1&key2=value2');// 使用数组
const params2 = new URLSearchParams([['key1', 'value1'],['key2', 'value2']
]);

2.获取参数值

你可以通过 get 方法来获取单个参数的值,或者通过 getAll 方法来获取所有同名参数的值。

const params = new URLSearchParams('?key1=value1&key2=value2&key2=value3');console.log(params.get('key1')); // 输出: value1
console.log(params.getAll('key2')); // 输出: ['value2', 'value3']

3.设置参数值

你可以使用 set 方法来设置或更新参数的值,使用 append 方法来添加多个同名参数。

const params = new URLSearchParams();params.set('key1', 'value1');
params.append('key2', 'value2');
params.append('key2', 'value3');console.log(params.toString()); // 输出: key1=value1&key2=value2&key2=value3

4.删除参数

你可以使用 delete 方法来删除指定名称的参数。


const params = new URLSearchParams('?key1=value1&key2=value2');params.delete('key1');console.log(params.toString()); // 输出: key2=value2

5.与 URL 对象配合使用

URLSearchParams 通常与 URL 对象一起使用,以方便地处理 URL 及其查询参数。

const url = new URL('https://example.com/?key1=value1&key2=value2');
const params = url.searchParams;console.log(params.get('key1')); // 输出: value1params.set('key1', 'newvalue1');
params.append('key3', 'value3');console.log(url.href); // 输出: https://example.com/?key2=value2&key1=newvalue1&key3=value3

6.迭代参数

你可以通过 forEach 方法或者 [Symbol.iterator] 来迭代所有的键值对。

const params = new URLSearchParams('?key1=value1&key2=value2');params.forEach((value, key) => {console.log(`${key}: ${value}`);
});// 或者使用 for...of 循环
for (const [key, value] of params) {console.log(`${key}: ${value}`);
}

7.将参数转换为对象

有时你需要将 URLSearchParams 转换为普通的 JavaScript 对象。

const params = new URLSearchParams('?key1=value1&key2=value2');
const obj = {};for (const [key, value] of params) {obj[key] = value;
}console.log(obj); // 输出: { key1: 'value1', key2: 'value2' }

8.处理多个同名参数

当有多个同名参数时,URLSearchParams 可以很好地处理这些情况。

const params = new URLSearchParams('?key=value1&key=value2');console.log(params.getAll('key')); // 输出: ['value1', 'value2']

9.编码和解码

URLSearchParams 会自动处理参数的编码和解码。

const params = new URLSearchParams();params.append('name', 'John Doe');
params.append('tag', 'hello world');console.log(params.toString()); // 输出: name=John+Doe&tag=hello+world
http://www.lryc.cn/news/507162.html

相关文章:

  • 【Threejs】从零开始(十)--加载gltf模型和压缩后的模型
  • 国标GB28181平台EasyGBS在安防视频监控中的信号传输(电源/视频/音频)特性及差异
  • Day9 神经网络的偏导数基础
  • day4:tomcat—maven-jdk
  • apache-tomcat-6.0.44.exe Win10
  • Redis(2)常用命令
  • 【原生js案例】ajax的简易封装实现后端数据交互
  • 安卓环境配置及打开新项目教程,2024年12月20日最新版
  • Docker 安装 禅道-21.2版本-外部数据库模式
  • 写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践
  • 数据分析实战—鸢尾花数据分类
  • 【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)
  • 堆栈粉碎的原理与预防攻击措施
  • Flutter组件————AppBar
  • 请问深度学习直接缝了别的模型,在论文中这种创新点应该如何描述呢?
  • 微流控专题 | 微流体应用说明——藻酸盐微球生产简介
  • 【前后端】HTTP网络传输协议
  • Fastdfs V6.12.1集群部署(arm/x86均可用)
  • 【LeetCode每日一题】——434.字符串中的单词数
  • windows C#-使用构造函数
  • [react]redux异步处理和重写useDispatch
  • 基础数据结构---栈
  • 【HarmonyOS之旅】DevEco Studio的安装与环境配置
  • Liveweb视频融合共享平台在果园农场等项目中的视频监控系统搭建方案
  • Android4.4 在系统中添加自己的System Service
  • 【C++】C++实现字符串大小写转换功能
  • 【蓝桥杯】43696.小数第n位
  • 进程间通信方式---消息队列(System V IPC)
  • windows10 安装wsl、迁移到其他盘
  • el-divide(vue3总)