通过 Blob 创建下载文件
Blob
如上图所示,Blob 对象有三个部分组成,data:image/jpeg
表示该 Blob 是什么类型的文件。base64
是一个二进制到文本的编码,更多细节查看Base64 编码/解码。其余的就是以 Base64 编码出来的二进制到文本的表现形式。
File
File 用来表示用户本地文件对象。File 继承自 Blob 对象,可以使用 Blob 对象的场合都可以使用它。
File 最常见的使用场合是表单的文件上传控件 <input type="file" />
,用户选中文件以后,浏览器就会生成一个数组,里面是每一个用户选中的文件,它们都是 File 对象:
Blob 创建下载文件
浏览器允许使用 URL.createObjectURL()
方法,针对 Blob 对象生成一个临时 URL,以便于某些 API 使用。这个 URL 以 blob://
开头,表明对应一个 Blob 对象,协议头后面是一个识别符,用来唯一对应内存里面的 Blob 对象。
const json = JSON.stringify([
{
name: "小红",
grade: 1
}
]);
document.querySelector("#down").onclick = () => {
const blob = new Blob([json], { type: "application/json" });
const a = document.createElement("a");
a.download = "data.json";
a.href = URL.createObjectURL(blob);
a.click();
};
把需要下载的内容插入到 Blob 对象中,指明文件 MIME 类型。把 URL 传递给 a 标签,再通过点击事件让其执行下载。
FileReader 读取上传文件
const input = document.querySelector("#input");
input.addEventListener("change", e => {
const reader = new FileReader();
reader.readAsDataURL(e.target.files[0]);
reader.onload = e => {
console.log(reader.result);
};
});
通过 Blob 创建下载文件的更多相关文章
- vue通过Blob实现下载文件
需求是这样的...... 具体实现,前端拿到后端返回回来的数据,然后通过Blob实现下载,文件内容样式啥的都是后端写的 script代码: 这里的data就是后端返回回来的数据,此方法兼容IE dow ...
- [转]用JavaScript在浏览器中创建下载文件
前端很多项目中,都有文件下载的需求,特别是JS生成文件内容,然后让浏览器执行下载操作(例如在线图片编辑.在线代码编辑.iPresst等. 但受限于浏览器,很多情况下我们都只能给出个链接,让用户点击打开 ...
- 极其简单的用JS在浏览器中创建下载文件的方法
有这样一个需求,在js中动态创建一个页面,然后下载该页面为word文档,研究了一上午,最后发现实现起来如此简单. 在js中创建如下方法:(直接复制即可) function downloadFile(f ...
- js创建下载文件
function downloadFile(fileName, content){ var aLink = document.createElement('a'); var blob = new Bl ...
- 前端vue下载文件时blob返回流中怎么获取文件名
我很久之前写了一篇前端vue利用blob对象下载文件,有些人私信我,如果后端返回流失败,给出的json对象该怎么获得?前端获取的流怎么能获取原文件名?其实在那篇文章之后,我就已经针对这两个问题进行了优 ...
- 前端vue项目-关于下载文件pdf/excel(三)
最近在做一些需求,需要下载一些文件信息,最频繁的就是下载excel文件到本地了 看过了很多方法,做个整理吧哈哈哈哈 参考的文章链接: https://www.cnblogs.com/jiangweic ...
- axios 下载文件
axio请求里必须加 responseType: 'blob' 参数,如下 //下载文件 api.download=function(id) { return request({ url: this ...
- 前端通用下载文件方法(兼容IE)
之前在网上看到一个博主写的前端通用的下载文件的方法,个人觉得很实用,所以mark一下,方便以后查阅 源文地址(源文还有上传/下载excel文件方法) 因为项目要求要兼容IE浏览器,所以完善了一下之前博 ...
- struts2从浅至深(四)下载文件
1.创建下载文件动作类 2.配置struts 3.提供一个下载链接 4.下载页面 为什么文件名是链接名 只是以链接名显示,但文件的本身是个图片秩序改掉后缀名就可以了
- 利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件
博客地址:https://ainyi.com/65 解释 | 背景 看到标题有点懵逼,哈哈,实际上是后端将文件处理成二进制流,返回到前端,前端处理这个二进制字符串,输出文件或下载 最近公司有个需求是用 ...
随机推荐
- JavaEE Day07 HTML
今日内容 Web概念概述 HTML 一.Web概念概述 1. JavaWeb:使用Java语言开发的基于互联网的项目 2.软件架构 C/S架构:Client/Server--- 客户端/服务器端(安卓 ...
- Flaks框架(g对象,session,数据库连接池,信号,flask-script,SQLAlchemy(ORM))
目录 一:g对象 简介 1.g对象和session的区别 2.g对象实战代码 二:flask-session(借助于第三方插件连接redis保存session ) 1.方式一: 2.方式二(flask ...
- js迭代循环
一.for loop for (let i = 0; i < products.length; i++) { console.log(products[i]); } 支持循环中断,可以用brea ...
- Qt从实习到搬砖
Qt C++ 工具箱 从零开始的Qt开发之路 里面大概会写一些和Qt相关的内容,也不说是从0开始,感觉Qt做东西和用 C#也差不了很多?也许吧,总之慢慢来,一步一个脚印,直到给它拿下. 2022.5. ...
- 甜点cc的2022年回顾总结
每每到年底,总会感概时间飞逝,总会莫名的心慌几天. 高中时代我就明白了一个道理:自己决定做的事,就算结果再烂以后也不要后悔,因为那无异于否定过去的自己.人不能总是否定自己的过去,因为我觉得这样会打击自 ...
- 封装一个python的pymysql操作类
最近使用pymysql写脚本的情况越来越多了,刚好整理,简单封装一个pymysql的操作类 import pymysql class MysqlDB: def __init__( self, host ...
- latex文档的中文字体设置
Latex文档的中文字体设置 近日在用latex写论文时遇到了中文字体设置的问题.具体问题如下,正文字体为宋体,摘要和关键词字体为仿宋.作为latex云玩家,我马上百度了中文字体的设置方法.搜索到了如 ...
- Git Rebase和Merge的用法
title: Git Rebase和Merge的用法 categories: 后端 tags: - Git Rebase和Merge是什么? merge和rebase的作用都是合并两个分支,其区别在于 ...
- Redis哨兵集群搭建-Docker-Compose
title: Redis哨兵集群搭建(Docker-Compose) date: 2022-09-27 17:00:56 tags: - Redis 代码地址:https://github.com/l ...
- P3934 [Ynoi2016] 炸脖龙 I
题面 给一个长为 \(n\) 的序列,\(m\) 次操作,每次操作: 1.区间 \([l,r]\) 加 \(x\) 2.对于区间 \([l,r]\),查询: \[a[l]^{a[l+1]^{a[l+2 ...