首页 > 其他分享 >前端使用Blob生成伪链接

前端使用Blob生成伪链接

时间:2023-06-28 16:23:01浏览次数:31  
标签:文件 前端 Blob file 上传 链接 图片

​ Blob(二进制大对象)是一种特殊的数据类型,用于表示二进制数据。它可以保存任意类型的数据,包括图像、音频、视频、文件等。

Blob 对象通常在浏览器环境下使用,它提供了一种在客户端处理二进制数据的方式。Blob 对象包含两个重要的属性:sizetype

  • size 属性表示 Blob 对象的大小(以字节为单位)。
  • type 属性表示 Blob 对象的 MIME 类型。MIME 类型是一种标识数据类型的字符串,常用于指定网络传输中的数据格式。

Blob 对象可以用于多种用途,例如:

  1. 处理文件上传:将用户选择的文件转换为 Blob 对象,然后上传到服务器。
  2. 图片处理:将 Canvas 或者 Image 元素的数据导出为 Blob 对象,可以进行保存或者上传。
  3. 音频、视频处理:将音频或视频数据转换为 Blob 对象,进行播放或者上传等操作。

在 JavaScript 中,Blob 对象常常与其他 API(如 XMLHttpRequest、Fetch API、File API)一起使用,以便在客户端进行文件的读取、上传、下载等操作。

​ 我们写前端页面经常需要用到上传功能,尤其是上传图片功能,而我们在实现在上传图片时为了更好地使用体验经常会在选择完图片之后将图片进行回显,如下图所示:

​ 有时我们实现上传图片的时候并不是将上传功能单独作为一个请求,而是作为表单的一部分放入FormData中在提交的时候一起发送给后端(如下图代码所示),但是图片回显是需要链接的,那么链接在哪获取呢?

  <el-form-item label="图片">
    <el-upload
      ref="picUpload"
      class="avatar-uploader"
      accept=".png,.jpg"
      action=""
      :show-file-list="false"
      :on-remove="removePic"
      :on-change="choosePic"
      :limit="1"
      :auto-upload="false"
    >
      <img v-if="picFileInfo" :src="picFileInfo.url" class="avatar" />
      <img v-else-if="form.image" :src="form.image" class="avatar" />
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
      <div slot="tip" class="el-upload__tip" style="color:red">
        只能上传png/jpg文件
      </div>
    </el-upload>
    <el-button @click="removePic" type="success">清空图片</el-button>
  </el-form-item>

​ 通过Element-UI官方文档我们可以发现官方提供了一个on-change钩子函数并且入参是(file,fileList)

file:就是此时上传的文件

fileList:就是上传的文件列表

因为我们的需求每次只需要上传一张,因此我们创建on-change钩子函数的绑定函数,打印一下file看一下内容。

// 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
choosePic(file) {
  console.log(file);
},

如下图所示我们可以发现我们上传的图片文件被封装在file.raw中,现在获取到了文件信息,就可以使用Blob创建伪链接了

​ 要生成一个 Blob 对象的伪链接(Blob URL),我们可以使用 URL.createObjectURL() 方法。这个方法会创建一个指向 Blob 对象的临时 URL,可以用于在浏览器中展示或下载对应的二进制数据。

// 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
choosePic(file) {
  // 生成伪链接并赋值给file中的url
  file.url = URL.createObjectURL(file.raw);
  // 打印查看
  console.log(file);
  // 将文件信息赋值给 变量
  this.picFileInfo = file;
},

打印file可以看到在url中出现了一个链接,复制链接在浏览器中访问可以看到图片。

此时图片上传后的回显工作已经完成了,那么有一个问题来了,如果我图片上传错了怎么办?老办法先查看官方文档,通过官方文档我们可以看到官方提供了3个现有方法,调用一下clearFiles方法。

经测试仅调用clearFiles函数无法完成删除图片重新上传要求,查资料知道还需要调用abort方法,调用abort方法后问题解决。

// 移除图片并重新上传的条件
removePic() {
  // 清空已上传的文件列表
  this.$refs.picUpload.clearFiles();
  // 取消本次上传请求
  this.$refs.picUpload.abort();
  // 初始化链接
  this.picFileInfo = null;
},

需要注意的是,clearFiles 并不会取消上传文件的操作。若已经开始上传文件,还需要通过其他方式来取消上传操作,比如调用 abort() 方法。一定要添加 clearFiles() 和 abort() 函数,否则无法实现在当前窗口出错时删掉图片继续上传新图片

标签:文件,前端,Blob,file,上传,链接,图片
From: https://www.cnblogs.com/zzprogram/p/17511717.html

相关文章

  • 前端项目创建
    1.public文件1.1  ico文件是浏览器上显示的小图标1.2  index.html单页应用的唯一html文件2.src文件夹2.1  api会去封装我们发给后端的请求2.2  request.js帮我们封装了axios2.2.1  请求拦截器帮你往请求头里面塞数据进去  2.2.2 响应拦截器  ......
  • 前端埋点、pv/uv统计、前端监控
    1.pv/uv统计pv:页面重复浏览量统计方式,多页面应用通常在页面load事件,单页应用通常在页面路由中uv:页面独立访客浏览量统计方式,pv统计的基础上,添加唯一标识,可以是IP地址,用户浏览器localStorage存储的uuid等。IP地址存在局域网内的共享一个ip、代理、动态ip等误差uuid存在......
  • 一文读懂火山引擎A/B测试的实验类型(3)——多链接实验
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群一.概述多链接实验,也称为Spliturl实验,用户根据分流结果访问不同版本的url。举个例子:当您有两个不同样式的落地页https://example.com/1.html和https://example.com/2.html,想要......
  • Linux系统怎么添加一个桌面快捷方式链接到网站
    Linux系统需要添加一个桌面快捷方式链接到网站可以编辑在桌面编辑文档注意:文件需要以desktop为后缀index.desktop内容如下[DesktopEntry]Encoding=UTF-8Name=OutLookType=ApplicationIcon=/home/administrator/桌面/logo.pngCategories=office;Exec=/usr/bin/qaxbro......
  • 前端Vue自定义手机号文本格式化组件手机号码文本转星号
    前端Vue自定义手机号文本格式化组件,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13231效果图如下:cc-format-phone使用方法<!--phone:手机号isStar:是否转星号--><cc-format-phone:phone="":isStar="false"></cc-format-phone>......
  • 前端Vue自定义微信支付弹框dialog alert popup
    前端Vue自定义微信支付弹框dialogalertpopup, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13245效果图如下:实现代码如下:cc-payDialog使用方法<!--:money:支付金额 show:是否显示@cancel:取消 @success:确认支付--><cc-payDia......
  • 前端自适应写法--媒体查询
    自适应一般什么rem,vw,vh这些单位注意一下。还有就是一些bootStrap什么的。在这里主要写一下媒体查询的方式。使用CSS中的媒体查询来根据不同的屏幕尺寸应用不同的样式。以下是如何使用媒体查询分别为320px-480px范围内、768px-1024px范围内和大于1024px的屏幕尺寸编写CSS样式:/*......
  • redis介绍和安装,redis普通链接和连接池,redis字符串类型,redis hash类型
    1Redis介绍和安装#Redis:软件,存储数据的,速度非常快,redis是一个key-value存储系统(没有表的概念),cs架构的软件 -服务端客户端(python作为客户端,java,go,图形化界面,命令窗口的命令)#es:存数据的地方#关系型数据库和非关系型数据库 -关系型:mysql,PostgreSQL,oracle,sqlserver,db2......
  • 【转】【C#】调用链接服务器的存储过程
    XXX.codeDB.dbo.SP_XXXX执行时,存储过程按这个格式如果遇到问题:拒绝了对对象(数据库'codeDB',架构'dbo')的EXECUTE权限。对链接服务器右键-属性-安全性,看到连接使用的用户后,在目标数据库里找到对应数据库-属性-权限-把对应用户在右下角表格里的执行勾......
  • 代购源码,淘宝代购系统源码,代购程序,代购系统源码PHP前端源码参数说明
    代购业务场景:代购业务近年兴起的一种购物模式,是帮国外客户购买中国商品。主要通过外贸代购模式,把淘宝、天猫等电商平台的全站商品通过API接入到你的网站上,瞬间就可以架设一个有数亿产品的大型网上商城,而且可以把这些中文的商品全部自动翻译成各国语言,能让国外客户看懂,直接在网站......