#Js篇:BlobFile对象URL.createObjectURL()fetchlocationnavigatornew URl

article/2025/8/2 23:07:23

Blob

在 JavaScript 中,Blob 是一个非常重要的对象,用于表示不可变的、原始的二进制数据块(Binary Large Object)

arrayBuffer():获取 Blob 的二进制数据作为 ArrayBuffer。
stream():创建一个可读流,以便逐步读取 Blob 内容。
text():将 Blob 转换为文本字符串。
slice():分割 Blob,生成新的 Blob 对象。

File 对象

属性
name 文件名称(不包括路径)
lastModified 文件最后修改的时间戳(毫秒)
size 文件大小(字节)
type 文件的 MIME 类型

定义
它扩展自 Blob(Binary Large Object),因此拥有所有 Blob 的方法和属性,并且还提供了一些额外的信息,比如文件名、最后修改时间等。File 对象通常与 元素一起使用,允许用户从本地文件系统中选择文件。

创建的过程分为
一: 用户选择文件创建 File 对象:

二: 手动创建 File 对象:

const content = new Blob(['Hello, world!'], { type: 'text/plain' });
const file = new File([content], "hello.txt", { type: "text/plain" });
console.log(file.name); // 输出: hello.txt

总之,File 对象是处理用户选择文件的核心工具,在文件上传、预览、读取等场景中扮演着重要角色。通过结合 FileReader、FormData 和其他相关 API,开发者能够实现丰富的文件处理功能。

URL.createObjectURL()

URL.createObjectURL() 是 JavaScript 提供的 Web API,用于​​为 Blob 或 File 对象创建一个唯一的临时 URL​​。这个 URL 可以像普通 URL 一样使用,但指向的是浏览器内存中的对象。

Blob URL 是浏览器内部的私有引用,替换域名无效,跨页面也无效。你应该将文件内容转换为 Base64 字符串或先上传服务器再传 fileId 给目标页面。

一个典型的 blob URL 是这样的
blob:http://example.com/4e7defd0-f9b5-4e53-a08c-cb82c1d0f6dd

它只是浏览器内存中的一个映射;
只有创建它的那个页面才能访问它。

blob: 协议头,表示这是一个 blob URL
http://example.com/ 创建该 blob URL 的文档的源(origin),用于安全隔离
4e7defd0-… 浏览器为这个 Blob 分配的唯一标识符

主要用途

生成文件预览:例如显示用户选择的图片或视频。
下载文件:创建一个临时的下载链接让用户可以下载由程序动态生成的内容(如文本文件、JSON 数据等)。
音频/视频播放:直接从 Blob 或 File 对象中读取并播放多媒体内容。

示例

const blob = new Blob(['Hello, world!'], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
console.log(url); // 输出类似 "blob:http://example.com/4e7defd0-f9b5-4e53-a08c-cb82c1d0f6dd"

对象URL的有效期:对象URL仅在其创建的文档存在期间有效。一旦文档被卸载(即用户离开页面),所有通过 URL.createObjectURL() 创建的URL都会失效。
释放对象URL:为了防止内存泄漏,当你不再需要使用对象URL时,应该调用 URL.revokeObjectURL() 方法来释放它。这告诉浏览器它可以安全地清除与该URL关联的资源。

const url = URL.createObjectURL(blob);
// 使用url...
URL.revokeObjectURL(url); // 当你确定不再需要使用这个URL时调用

fetch()

定义

fetch() 是现代浏览器中用于发起网络请求(如 HTTP 请求)的内置 API,常用于从服务器获取或发送数据。它比传统的 XMLHttpRequest 更加简洁、强大,并且基于 Promise,支持异步编程。

fetch(url, options).then(response => response.json()) // 或 text(), blob() 等.then(data => console.log(data)).catch(error => console.error('Error:', error));
参数说明

url String 要请求的资源地址(如:https://api.example.com/data)
options Object 可选参数,包括请求方法、头部、请求体等

fetch('https://api.example.com/data', {method: 'GET', // 或 POST、PUT、DELETE 等headers: {'Content-Type': 'application/json',// 其他 header 如 Authorization},body: JSON.stringify({ key: 'value' }), // 仅 POST/PUT 等需要mode: 'cors', // 或 no-cors, same-origincache: 'no-cache', // 缓存策略credentials: 'include' // 是否携带 cookie(跨域时需后端允许)
})
返回

fetch() 返回一个 Promise,它解析为一个 Response 对象。你需要使用以下方法提取响应内容

方法 说明 示例
.json() 将响应解析为 JSON 对象 response.json()
.text() 将响应解析为字符串 response.text()
.blob() 获取二进制内容(如图片、文件) response.blob()
.arrayBuffer() 获取原始二进制数据 response.arrayBuffer()
.formData() 获取 multipart/form-data 数据 response.formData()

请求示例

get

fetch('https://jsonplaceholder.typicode.com/posts').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error fetching data:', error));

post

fetch('https://jsonplaceholder.typicode.com/posts', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({title: 'foo',body: 'bar',userId: 1})
}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error posting data:', error));

window.location

常用
属性示例值描述
href"https://example.com/path?q=test"完整URL
origin"https://example.com"协议+域名+端口
protocol"https:"协议(含冒号)
host"example.com:8080"域名+端口
hostname"example.com"域名(不含端口)
port"8080"端口号
pathname"/path"URL路径部分
search"?q=test"查询字符串(含问号)
hash"#section"锚点标识(含井号)
// 常规跳转(可回退)
window.location.assign("/new-page");// 替换当前页(不可回退)
window.location.replace("/login");// 带缓存的刷新
window.location.reload();// 强制刷新(Ctrl+F5效果)
window.location.reload(true);

navigator

属性说明示例值
userAgent浏览器用户代理字符串"Mozilla/5.0 (Windows NT 10.0)"
appVersion浏览器版本信息"5.0 (Windows)"
platform操作系统平台"Win32"
vendor浏览器供应商"Google Inc."

new URLSearchParams()

定义

URLSearchParams 是 JavaScript 提供的用于处理 URL 查询字符串的 API

操作

// 从完整 URL 中提取查询参数
const url = new URL('https://example.com/path?param1=value1&param2=value2');
const params = new URLSearchParams(url.search);const name = params.get('name'); // "李四"(获取第一个值)
const cities = params.getAll('city'); // ["北京", "上海"](获取所有同名值)const hasName = params.has('name'); // true

new URL()

定义

new URL() 是 JavaScript 中用于创建 URL 对象的构造函数。它允许你以编程方式构建、解析和操作 URL 字符串。URL 对象提供了一系列属性和方法来访问和修改 URL 的各个部分,比如协议、主机名、路径等。

示例
// 获取url
const url = new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');
console.log(url.protocol); // "https:"
console.log(url.username); // "user"
console.log(url.password); // "pass"
console.log(url.hostname); // "sub.example.com"
console.log(url.port);     // "8080"
console.log(url.pathname); // "/p/a/t/h"
console.log(url.search);   // "?query=string"
console.log(url.hash);     // "#hash"// 基本路径解析相对路径
const baseUrl = 'https://example.com/path/';
const relativeUrl = './sub/path?query=123';
const absoluteUrl = new URL(relativeUrl, baseUrl);
console.log(absoluteUrl.href); // "https://example.com/path/sub/path?query=123"// 添加修改
const url = new URL('https://example.com/path?param1=value1&param2=value2');
// 获取查询参数对象
const params = new URLSearchParams(url.search);
// 添加或修改参数
params.set('param1', 'newValue1');
params.append('param3', 'value3'); // 添加新参数
// 应用到 URL
url.search = params.toString();
console.log(url.href); // "https://example.com/path?param1=newValue1&param2=value2&param3=value3"

在这里插入图片描述


http://www.hkcw.cn/article/EvEXnwFHvc.shtml

相关文章

HAProxy 可观测性最佳实践

HAProxy 简介 HAProxy(High Availability Proxy)是一款广泛使用的高性能负载均衡器,支持 TCP 和 HTTP 协议,提供高可用性、负载均衡和代理服务。它特别适用于负载较大的 Web 站点,能够支持数以万计的并发连接&#xf…

软件测试|FIT故障注入测试工具——ISO 26262合规下的智能汽车安全验证引擎

FIT(Fault Injection Tester)是SURESOFT专为汽车电子与工业控制设计的自动化故障注入测试工具​,基于ISO 26262等国际安全标准开发,旨在解决传统测试中效率低、成本高、安全隐患难以复现的问题,其核心功能包括&#xf…

【计算机网络】应用层协议Http——构建Http服务服务器

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹: 【Linux笔记】——进程间关系与守护进程 🔖流水不争,争的是滔滔不息 一、Http协…

[ctfshow web入门] web80

信息收集 过滤了php和data if(isset($_GET[file])){$file $_GET[file];$file str_replace("php", "???", $file);$file str_replace("data", "???", $file);include($file); }else{highlight_file(__FILE__); }解题 大小写…

移动安全Android——客户端数据安全

本地文件权限配置 测试流程 (1)手机运行待测APP应用,adb执行命令找到APP包名 adb shell dumpsys activity top|findstr ACTIVITY (2)adb shell 进入设备,以Root权限进入/data/data/package包名目录下 c…

AI生态警报:MCP协议风险与应对指南(下)——MCP Host安全

AI生态警报:MCP协议风险与应对指南(上)——架构与供应链风险https://blog.csdn.net/WangsuSecurity/article/details/148335401?sharetypeblogdetail&sharerId148335401&sharereferPC&sharesourceWangsuSecurity&spm1011.24…

机房网络设备操作安全管理制度

该制度围绕机房网络设备操作安全,规定账号实行系统管理员、操作管理员、一般用户三级分级管理,遵循最小授权和权限分割原则,账号需实名制、禁止共享及转借,密码设置需至少 8 位、3 种字符组合且每 3 个月修改一次;高危指令执行需上级审批、双人核查,远程登录需限制权限、…

Root权限:解锁Android的终极力量

Root后的功能扩展 Root后可以实现的高级功能,如系统级备份、自定义ROM、性能优化、广告屏蔽等。 Root的风险与防范 讨论Root可能导致的安全问题,如恶意软件攻击、系统不稳定、保修失效等,提出降低风险的建议,如使用可信工具、备…

亚马逊数据采集软件完全指南:从工具原理到实战落地

亚马逊数据采集软件有哪些?在数字化商业浪潮中,亚马逊作为全球电商巨头,其平台上蕴含着海量的数据宝藏。对于卖家、品牌商以及市场分析师而言,精准获取和分析这些数据,成为了在激烈竞争中脱颖而出的关键。从产品定价的…

免费高清多功能录屏软件推荐

软件介绍 今天为大家介绍一款功能全面的免费录屏软件 - 云豹录屏大师。 录屏格式支持 这款软件特别强大,能够录制多种常见视频格式,包括MP4、AVI、WMV等格式,满足不同场景的录制需求。 高帧率支持 软件最高支持120帧的录制效果&#xff0…

【交通 Traffic Transformer】同一篇文章,内容排版稍有不同 | 交通预测模型中,Transformer相比传统GCN模型有何优势?

冰冻三尺,非一日之寒。 前情提要: 【Traffic Transformer】将 Transformer 应用于 交通预测领域中 | 动态和分层交通时空特征 | 时空模型比纯时间模型的性能要好得多 | 定义不好的相邻矩阵会损害模型Transformer相比传统GCN模型在交通预测中具有三大核心优势: 1、动态空间依…

docker-compose搭建prometheus以及grafana

1. 什么是 Prometheus? Prometheus 是一个开源的系统监控和告警工具,由 SoundCloud 于 2012 年开始开发,现为 CNCF(Cloud Native Computing Foundation)项目之一。它特别适合云原生环境和容器编排系统(如 …

AI科技前沿动态:5.26 - 5.30 一周速览

目录 ⭐ 本周热点💡 阿里巴巴开源自主搜索 AI 智能体 WebAgent💡 我国首个软件开发 AI 智能体标准发布,20 余家巨头联手参编💡 刚刚,新版DeepSeek-R1正式开源!直逼o3编程强到离谱,一手实测来了 …

【google 论文】Titans: Learning to Memorize at Test Time

核心思想与贡献: 这篇论文的核心贡献在于提出了一种新的神经网络长期记忆模块 (neural long-term memory module),并基于此构建了一个名为 Titans 的新型系列架构。这个架构旨在克服现有模型(如Transformers)在处理超长序列和长期…

VASP 教程:VASP 结合 Phonopy 计算硅的比热容

VASP 全称为 Vienna Ab initio Simulation Package(The VASP Manual - VASP Wiki)是一个计算机程序,用于从第一性原理进行原子尺度材料建模,例如电子结构计算和量子力学分子动力学。 Phonopy(Welcome to phonopy — Ph…

企业数字化转型的7个难点

数字化转型不是一个有始有终的项目,而是一个持续变革的过程,过程漫长,且险象环生。需要领导者带领企业从成功或不成功的经验里持续反思、持续学习。 近年来,以移动互联网、云计算、大数据、人工智能等为代表的新一代数字化技术正在…

华为OD机试真题——简易内存池(2025A卷:200分)Java/python/JavaScript/C++/C/GO最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《简易…

mysql-mysql源码本地调试

前言 先进行mysql源码本地编译:mysql源码本地编译 1.本地调试 这里以macbook为例 1.使用vscode打开mysql源码 2.创建basedir目录、数据目录、配置文件目录、配置文件 cd /Users/test/ mkdir mysqldir //创建数据目录和配置目录 cd mysqldir mkdir conf data …

华为OD机试真题——查找接口成功率最优时间段(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

硬件I2C和软件I2C的区别

硬件I2C和软件I2C的区别 一、硬件I2C 1、硬件IC的局限性及学习意义 尽管硬件IC外设在STM32等微控制器中提供了标准化的通信支持,但在实际应用中,其稳定性可能存在问题。例如,某些情况下外设会因事件检测异常而进入死锁状态,仅能…