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

思路:

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

一、HTML

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

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

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

二、js

// 上传文件
    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 来用于数据操作。

// 语法
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 对象的方法:

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

可以使用xlsx和file-saver库来实现网页预览base64格式的excel文件,并将其表格显示出来。以下是一个简单的示例代码: 首先,需要安装xlsx和file-saver库: ```bash npm install xlsx file-saver ``` 然后,在vue组件中引入这两个库: ```typescript <script lang="ts"> import * as XLSX from 'xlsx'; import * as FileSaver from 'file-saver'; export default { data() { return { fileData: '', fileName: '' }; }, methods: { previewExcel() { const fileReader = new FileReader(); fileReader.onload = (e: any) => { const data = e.target.result; const workbook = XLSX.read(data, { type: 'binary' }); const sheetName = workbook.SheetNames[0]; const sheet = workbook.Sheets[sheetName]; this.fileData = XLSX.utils.sheet_to_json(sheet, { header: 1 }); const fileName = this.fileName.replace('.xlsx', ''); this.exportToExcel(fileName); }; fileReader.readAsBinaryString(this.file); }, exportToExcel(fileName: string) { const worksheet = XLSX.utils.json_to_sheet(this.fileData); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, worksheet, 'Sheet1'); const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); const blob = new Blob([excelBuffer], { type: 'application/octet-stream' }); FileSaver.saveAs(blob, `${fileName}.xlsx`); } } }; </script> ``` 其中,`previewExcel`方法用于将base64格式的excel文件转换为表格数据,并将其显示出来;`exportToExcel`方法用于将表格数据导出为excel文件并下载到本地。 在模板中,我们可以使用`input`元素和`FileReader`API来选择文件并将其转换为base64格式: ```html <template> <div> <input type="file" @change="handleFileChange" /> <button @click="previewExcel">Preview Excel</button> <table> <thead> <tr> <th v-for="(header, index) in fileData[0]" :key="index">{{ header }}</th> </tr> </thead> <tbody> <tr v-for="(row, index) in fileData" :key="index"> <td v-for="(cell, index) in row" :key="index">{{ cell }}</td> </tr> </tbody> </table> </div> </template> ``` 其中,`handleFileChange`方法用于获取选择的文件并将其转换为base64格式: ```typescript methods: { handleFileChange(e: any) { const file = e.target.files[0]; this.fileName = file.name; const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => { this.fileData = reader.result; }; } } ``` 这样,我们就可以通过选择excel文件并点击按钮来预览表格了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值