Blob,File文件上传下载的内容笔记

news2024/11/16 23:50:08

Blob 对象表示一个不可变、原始数据的类文件对象,可以看做是存放二进制数据的容器 。

简单来说Blob就是一个二进制的对象,我们可以通过这个blob对象直接读取文件内容

Blob和Flie没什么区别,File继承于Blob,就是多了一个name属性,表示文件名。

JS 提供的 FileReader 、URL.createObjectURL() 都可以处理 File / Blob。

FileReader 对象允许异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容。

URL.createObjectURL() 将指定的 File / Blob 转成一个 blob url 访问链接。

这个 URL 的生命周期和创建它的窗口中的 document 绑定。也就是不是持久化的,它只是存在内存中。

URI和URL区别:URL在URI基础上更具体 

DOMString:   如: '<div>yt</div>'

base64:  将可打印字符串来表示二进制数据 

具体内容参考:什么是Base64?_allenayo的博客-CSDN博客

base64 和 blob:url 应用场景

  • base64 通常用于图片展示、图片预览
  • blob: url 通常用于分块上传、点击链接文件下载、生成 pdf 等

生成的 base64 和 url 并不是持久化,它们只是存在内存中,当你关闭文档后会自动从内存中删掉,因此你不可以将它们放到 localStore 或服务器中。

ArrayBuffer对象:  

  • 用来表示通用的、固定长度的原始二进制数据缓冲区。

 Blob对象创建:

/*
  array  是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array
  options  可选参数:
  type  默认值为 "",它代表了将会被放入到 blob 中的数组内容的 MIME 类型
  endings  默认值为"transparent",用于指定包含行结束符\n的字符串如何被写入
*/
new Blob(array[, options])

File对象创建:

/*
  bits  一个包含ArrayBuffer,ArrayBufferView,Blob,或者 DOMString 对象的 Array 
  或者任何这些对象的组合
  name  表示文件名称,或者文件路径

  options 可选参数:
  type: DOMString,表示将要放到文件中的内容的 MIME 类型。默认值为 "" 。
  lastModified: 数值,表示文件最后修改时间的 Unix 时间戳(毫秒)。默认值为 Date.now()。
*/
new File(bits, name[, options]);

创建blob URL:

/*
  这里也可用file替代blob
  将 File / Blob 转成一个 blob url 访问链接
  如:'blob:http://localhost:8080/1a729ced-fee3-4daf-b68f-31487f97c3ad'
*/
URL.createObjectURL(blob)

 创建data URL:

/*
  这里也可用file代替blob
  将 File / Blob 转成一个 data url 访问链接
  如:data:text/plain;base64,YWJjIEFCQwoxMjMONTY
*/
FileReader.readAsDataURL(file)

blob url和data url的区别:

对于data url ,出于安全性考虑,浏览器不允许通过程序用data url新开一个页面,比如用a标签方式跳转新页面打开,但是手动粘贴再去访问是可以访问到的。

注意:data url是可以在原组件中正常显示的,与blob url一样。

 补充额外知识:

a标签,有四种常用属性:

click属性   当点击a标签时,执行click绑定的事件

1、触发a的click事件
2、读取href属性的值
3、如果是URI则跳转
4、如果是javascript代码则执行该代码

target属性   用于指定链接文档在何处显示

 _self: 默认值。链接文档会在当前窗口或者框架中打开。

 _blank: 链接文档会在新窗口或者新标签页中打开。

 _parent: 链接文档会在父级框架中打开,如果没有父级框架,则与 _self 效果相同。

_top: 链接文档会在顶级窗口中打开,忽略所有框架

href属性    用于指定链接目标地址

download属性    对href属性链接文件的下载,下载的文件名就是download所命名的文件名

创建a标签:

let link = document.createElement("a");

常用这种a标签的这些属性实现一个文件的下载功能

一个动态下载文件案列:

//提前定义好的请求函数
export function getSomeSource(id){
  return request({
    url: `/api/getSomeSource/`+id,
    method: 'GET',
    //设置响应类型为blob
    responseType: 'blob'
  })
}
//设置一个函数实现下载文件功能,其他标签只要调用该函数都可以实现下载功能
downloadSome(row) {
      //发送请求获取下载文件
      //res是请求返回过来的数据,定义为blob类型
      getSomeSource(row.id).then(res => {
        if (typeof (res) !== 'undefined') {
          // 生成一个blob对象
          let blob = new Blob([res], {type: "application/json"});
           //创建a标签
          let link = document.createElement("a");
          // 将blob转成url
          link.href = window.URL.createObjectURL(blob);
          //配置下载的文件名   row.name是当前行的文件名
          link.download = row.name + '.' + 'docx';
          //触发点击事件
          link.click();
        }
      })
    },

小白一枚,如有补充或不足之处,可以在评论区评论,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当今职场,正在加速淘汰 “巨婴员工”

我担任过多家上市公司的技术高管职位&#xff0c;在工作中经常会遇到巨婴型员工&#xff0c;他们外在的表现是&#xff0c;不能够很好地管理自己&#xff0c;缺乏自律&#xff0c;缺乏起码的抗挫折能力和抗压能力&#xff0c;需要领导呵护着、同事们忍让着。作为一名管理者&…

科技成果鉴定测试有什么意义?专业CMA、CNAS软件测评公司

科技成果鉴定测试是指通过一系列科学的实验和检测手段&#xff0c;对科技成果进行客观评价和鉴定的过程。通过测试&#xff0c;可以对科技成果的技术优劣进行评估&#xff0c;从而为科技创新提供参考和指导。 一、科技成果鉴定测试的意义 1、帮助客户了解科技产品的性能特点和…

排序(七种排序)

1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 1.插入排序 1.1思路 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 1.2实现 //插入排…

[计算机入门] 个性化设置系统

3.2 个性化设置系统 在Windows系统中&#xff0c;个性化设置可以让用户根据自己的喜好和需求对系统进行定制和调整&#xff0c;包括桌面背景、声音、屏幕保护程序、鼠标指针、字体等。通过个性化设置&#xff0c;用户可以创建自己的独特界面和用户体验&#xff0c;使系统更加符…

HBuilderX获取iOS证书的打包步骤

简介&#xff1a; 目前app开发&#xff0c;很多企业都用H5框架来开发&#xff0c;而uniapp又是这些h5框架里面最成熟的&#xff0c;因此hbuilderx就成为了开发者的首选。然而,打包APP是需要证书的&#xff0c;那么这个证书又是如何获得呢&#xff1f; 生成苹果证书相对复杂一些…

Hyper-V Linux服务器安装

官方文档&#xff1a;在 Windows 10 创意者更新上使用 Hyper-V 创建虚拟机 | Microsoft Learn 1 新增虚拟交换机 打开Hyper-V管理器&#xff0c;找到右侧的操作列&#xff0c;点击“虚拟交换机管理器”&#xff1a; 点击“新建虚拟网络交换机”&#xff0c;交换机类型选择“外部…

用idea解决代码合并冲突

参考文章&#xff1a; IDEA&#xff1a;idea中的Git冲突解决&#xff08;非常重要&#xff09; idea操作git时 合并分支解决冲突 一、前言 1.什么事冲突&#xff1f; 冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致。读起来有点绕&#xff0c;结合下面的案例…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及FileSystem示例(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Unity解决:3D开发模式第三人称视角 WASD控制角色移动旋转 使用InputSystem

Unity版本&#xff1a;2019.2.3f1 目录 安装InputSystem 1&#xff1a;创建InputHander.cs脚本 挂载到Player物体上 获取键盘输入WADS 2.创建PlayerLocomotion.cs挂载到Player物体上&#xff0c;控制物体移动转向 安装InputSystem 菜单栏/Window/Package Manager/Input Syst…

AI图片处理功能演示

例如&#xff0c;这是一张不错的图片&#xff0c;但是有3只手。 我们可以选择有问题的区域&#xff0c;然后要求 niji 进行重新绘制。 根据我们选择的区域&#xff0c;我们可以以不同的方式修复结果。 创意修复 修复并不仅限于纠正错误。我们可以要求 niji 添加额外的元素&…

MATLAB R2023a for Mac Update_5

MATLAB是一种高级的计算机编程环境和开发工具&#xff0c;主要用于数值计算、数据分析、算法开发和可视化。它由MathWorks公司开发&#xff0c;被广泛应用于科学研究、工程设计、数据分析和教育等领域。 MATLAB提供了丰富的数学和工程函数库&#xff0c;可以进行矩阵运算、信号…

跨域资源共享 (CORS) | PortSwigger(burpsuite官方靶场)【万字】

写在前面 在开始之前&#xff0c;先要看看ajax的局限性和其他跨域资源共享的方式&#xff0c;这里简单说说。 下面提到大量的origin&#xff0c;注意区分referer&#xff0c;origin只说明请求发出的域。 浏览器的同源组策略&#xff1a;如果两个 URL 的 protocol、port 和 h…

所见即所得,「Paraverse平行云」助力万间打造智能建造新图景

在城市建设行业中&#xff0c;数字化逐渐成为其主导力量。 新一代信息基础设施建设也迎来了新的里程碑。数据显示&#xff0c;截至今年&#xff0c;我国已全面推进城市信息模型&#xff08;CIM&#xff09;基础平台建设&#xff0c;为城市规划、建设管理提供了多场景应用的强大…

【Python】代理池针对ip拦截破解

代理池是一种常见的反反爬虫技术&#xff0c;通过维护一组可用的代理服务器&#xff0c;来在被反爬虫限制的情况下&#xff0c;实现数据的爬取。但是&#xff0c;代理池本身也面临着被目标网站针对ip进行拦截的风险。 本文将详细介绍代理池针对ip拦截破解的方法&#xff0c;包含…

小研究 - Android 字节码动态分析分布式框架(三)

安卓平台是个多进程同时运行的系统&#xff0c;它还缺少合适的动态分析接口。因此&#xff0c;在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架&#xff0c;无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

colab释放GPU显存

不用其他博客说的安装包&#xff0c;然后查看进程&#xff0c;kill&#xff0c;本文介绍一种简单的方法。 点击运行过代码的ipynb页面右上角的下三角&#xff0c;然后点击展开菜单栏中的View resources 随后会展开一个侧边栏&#xff0c;点击 manage sessions 3. 在页面中央会…

十问华为云 Toolkit:开发插件如何提升云上开发效能

众所周知&#xff0c;桌面集成开发环境&#xff08;IDE&#xff09;已经融入到开发的各个环节&#xff0c;对开发者的重要性和广泛度是不言而喻的&#xff0c;而开发插件更是建立在IDE基础上的功能Buff。 Huawei Cloud ToolKit作为华为云围绕其产品能力向开发者桌面上的延伸&a…

CentOS系统环境搭建(十六)——es7安装ik分词器(纯命令行安装)

centos系统环境搭建专栏&#x1f517;点击跳转 关于Elasticsearch的安装请看CentOS系统环境搭建&#xff08;十二&#xff09;——CentOS7安装Elasticsearch。 es7安装ik分词器&#xff08;纯命令行安装&#xff09; 1.找版本 我的Elasticsearch是7.17.6的&#xff0c;下载ik…

BBS项目day03、首页(前端文章布局、分类布局、标签布局)、个人站点(前后端实现)、在admin中模拟数据先在admin.py中注册表

一、首页 路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注册path(register/, views.reg…

高忆管理:降息是什么意思?降息对股市是利好还是利空?

降息和降准是比较常见的两种货币政策&#xff0c;政府通过它们来完成一定的经济目标&#xff0c;那么&#xff0c;降息是什么意思&#xff1f;降息对股市是利好仍是利空&#xff1f;下面高忆管理为大家预备了相关内容&#xff0c;以供参阅。 降息通常是指央行下降银行的存款、贷…