通过input type=file 上传,获取data:base64格式文件,blob

news/2024/7/20 2:57:12 标签: javascript, 小程序, vue.js, html, html5

思路:

  1. 通过 input 获取到需要上传的文件;
  2. 通过事件获取到文件信息,利用 blob() 将文件转化成blob类型;
  3. 利用 FileReader 对象的 readAsDataURL() 方法获取文件的 data: Base64;

一、HTML

html"> <input type="file" @change="filechange"/>

H5 input type类型拓展: 参考菜鸟教程 类型大全

属性值描述
button定义可点击按钮(多数情况下,用于通过 JavaScript 启动脚本)
checkbox定义复选框
file定义输入字段和 "浏览"按钮,供文件上传。
hidden定义隐藏的输入字段
image定义图像形式的提交按钮
password定义密码字段。该字段中的字符被掩码
radio定义单选按钮
reset定义重置按钮。重置按钮会清除表单中的所有数据

二、js

html" title=javascript>javascript">// 上传文件
    filechange(e){
      const resultFile = e.target.files; // input 获取的文件列表
      // console.log(`resultFile`, resultFile)
      
      const aBlob = new Blob([resultFile[0]],{type:'video/mp4'}) // 指定转换成blob的类型
      // console.log(`aBlob`, aBlob)
      
      const reader = new FileReader(); // 3 新建 FileReader 对象,用于操作文件
      // console.log(`reader`, reader) 
      reader.onload=(ev)=>{
        const base64Url = ev.target.result; // 5 base64内容
      }
      reader.readAsDataURL(aBlob) // 4 将文件转换成指定类型的数据
    },

补充:
MDN 拓展一:Blob 完整文档

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。

html" title=javascript>javascript">// 语法
var aBlob = new Blob( array, options );
// 示例
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一个包含DOMString的数组
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob

array
是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings会被编码为UTF-8。
options 是一个可选的BlobPropertyBag字典,它可能会指定如下两个属性:
type,默认值为 “”,它代表了将会被放入到blob中的数组内容的 MIME类型。
endings,默认值为"transparent",用于指定包含行结束符\n的字符串如何被写入。 它是以下两个值中的一个: “native”,代表行结束符会被更改为适合宿主操作系统文件系统的换行符,或者 “transparent”,代表会保持blob中保存的结束符不变

补充:如果不知道当前文件的 MIME类型,可以通过打印文件的type熟悉查看。
在这里插入图片描述

MDN 拓展二:FileReader 完整文档

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

FileReader 对象的方法:

html" title=javascript>javascript">FileReader.abort() 
//中止读取操作。在返回时,readyState属性为DONE。
FileReader.readAsArrayBuffer()
// 开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.
FileReader.readAsBinaryString() 
// 开始读取指定的Blob中的内容。一旦完成,result属性中将包含所读取文件的原始二进制数据。
FileReader.readAsDataURL()
// 开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL格式的Base64字符串以表示所读取文件的内容。
FileReader.readAsText()
// 开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个字符串以表示所读取的文件内容。

本地文件预览请查看下篇文章https://blog.csdn.net/qq_45301392/article/details/115627872


http://www.niftyadmin.cn/n/909465.html

相关文章

操作VCF卡片信息的第三方jar包:ez-vcard

ez-vcard https://github.com/mangstadt/ez-vcard 目前最新的版本已经更新到0.9.8 起初使用该jar包的时候&#xff0c;是0.9.3&#xff0c;当时遇到一个很尴尬的问题&#xff0c; 就是在将联系人转化为vcf卡片文件之后&#xff0c; 用Android手机原生的vcf导入联系人的功能进行…

js读取本地视频文件,并预览base64,video

一、思路&#xff1a;利用 FileReader.readAsDataURL()将本地文件转成base64的src&#xff0c;然后赋值给标签&#xff1b; 如果不知道怎么使用blob和FileReader&#xff0c;可以先预览前置文章 https://blog.csdn.net/qq_45301392/article/details/115623849 FileReader.read…

git、回滚,.gitignore 忽略文件规则

Git 官网英文文档 https://git-scm.com/docs/gitignore 一、规则&#xff1a; *node_modules 过滤掉依赖文件包 或 node_modules/ 过滤掉依赖文件包里面所有文件 /public/ 忽略整个文件 !src/ 不忽略src文件及其内容 /public/img.png 忽略指定文件以斜杠/开头表示目录&…

Windows 10开发基础——指针事件和操作事件(一)

主要内容&#xff1a; 1.指针事件 2.操作事件 1.指针事件 指针事件由各种活动输入源引发&#xff0c;包括触摸、触摸板、笔和鼠标&#xff08;它们替代传统的鼠标事件&#xff09;。指针事件基于单一输入点&#xff08;手指、笔尖、鼠标光标&#xff09;&#xff0c;但不支持基…

create-react-app 脚手架,让react引入 @指向src

一、先暴露出webpack等相关配置文件 npm run eject二、修改 config/webpack.config.js 文件配置 const paths require(./paths); // config 中的一个文件resolve: {...alias: {...: paths.appSrc, // 增加这里} }三、引用 例&#xff1a;src / laylout / index.js 文件 imp…

基于eBox旋转编码器

在电子产品设计中&#xff0c;经常会用到旋转编码开关&#xff0c;比如数码电位器等&#xff0c;它的英文名翻译过来就是Rotary Encoder Switch。常见的有5pin和3pin产品。5pin实在左右旋转的基础上增加了向下按得功能。以EC11为例&#xff0c;常用语仪器仪表面板&#xff0c;音…

react css模块化导入使用

使用的是react-create-app脚手架&#xff1b; 一、期待用法 css: .layout-header{width: 80vw; }js: import styles from "./styles.module.css"const layout (props) >{return <div><div className{styles["layout-header"]}></di…

win32自绘按钮,使用GDI+(二)

一、解决上一篇的两个问题。 1、按钮背景透明 方法是&#xff0c;在绘制按钮之前&#xff0c;向按钮的父窗口发生WM_CTLCOLORBTN消息。该消息返回一个画刷句柄&#xff0c;系统使用该画刷句柄画出按钮的背景。所以我们在处理这个消息的时候&#xff0c;为系统返回一个空的画刷句…