赞
踩
介绍
MIME
类型FileReader
来读取blob中的内容创建
// 语法
const blob = new Blob(array, options);
// 示例
const blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});
const myBlob = new Blob([1,2,3],{type:'text/plain'});
console.log(myBlob);//Blob {size: 3, type: "text/plain"}
console.log(myBlob.size);//3
console.log(myBlob.type);//'text/plain'
介绍
File
对象是特殊的Blob
new File(array, name, options)
input type=file
选择文件,返回fileList
对象DataTransfer
对象创建
const file = new File([file], file.name, {type: file.type}); // input上传 <input type="file" id="file"> <script> let obj = document.querySelector('#file') obj.addEventListener('change', (event) => { console.log(event.target.files[0]); }) </script> // 拖拽 <div class="drop" style="background-color: pink; height: 50px;"></div> <script> let obj = document.querySelector('.drop') obj.ondragover = e => {e.preventDefault()} obj.ondrop = e => { e.preventDefault() console.log(e.dataTransfer.files); } </script>
是js的内置方法,帮助实现读取File/Blob
的对象内容
readAsArrayBuffer(file) 异步按字节读取文件内容,完成之后,result属性中保存被读文件的ArrayBuffer数据对象。
readAsBinaryString(file): 异步按字节读取文件内容,结果为文件的二进制串
readAsDataURL(file) 异步读取文件内容,结果用data:url的字符串形式表示。
readAsText(file) 异步按字符读取文件内容,result中包含的是字符串。
onabort 当读取操作被中止时调用
onerror 当读取操作发生错误时调用
onload 当读取操作成功完成时调用
onloadend 当读取操作完成时调用,不管是成功还是失败
onloadstart 当读取操作将要开始之前调用
onprogress 在读取数据过程中周期性调用
ArrayBuffer对象
、TypedArray视图
和DataView视图
是 JavaScript 操作二进制数据的一个接口以数组的语法处理二进制数据
,所以统称为二进制数组类似数组的对象
它由三类对象组成
ArrayBuffer对象
代表内存之中的一段二进制数据,可以通过“视图”进行操作。“视图”部署了数组接口,这意味着,可以用数组的方法操作内存。
TypedArray视图
共包括 9 种类型的视图,比如Uint8Array(无符号 8 位整数)数组视图, Int16Array(16 位整数)数组视图, Float32Array(32 位浮点数)数组视图等等。
DataView视图
可以自定义复合格式的视图,比如第一个字节是 Uint8(无符号 8 位整数)、第二、三个字节是 Int16(16 位整数)、第四个字节开始是 Float32(32 位浮点数)等等,此外还可以自定义字节序。
ArrayBuffer不是能直接读取所存储的内容,需要借助TypedArray
对象或DataView
对象来读写
用法
<!DOCTYPE html> <html> <head> <title>Upload Image</title> </head> <body> <input type="file" name="imgFile" id="imgFile" onchange="changeFile()" /> <br /> <img id="previewImg" src="" alt="Preview Image" /> <script> function changeFile() { const imgFile = document.getElementById('imgFile').files[0]; // 接口需要的参数 file类型的图片 console.log(imgFile.size); if (imgFile.size > 1024 * 1024 * 2) return alert('不允许超过 2 M'); const typeArr = ['image/png', 'image/jpeg', 'image/git', 'image/jpg']; if (!typeArr.includes(imgFile.type)) return alert('只支持jpg,png,jpeg,gif格式'); // 生成预览图片地址:通过js将文件信息在本地电脑内存中变成一个预览地址临时拿去使用显示 const imgUrl = URL.createObjectURL(imgFile); console.log(imgUrl); // blob:null/a0972036-a4b0-4821-9a0e-b2003797cb3d document.getElementById('previewImg').src = imgUrl; } </script> </body> </html>
介绍
文本数据
的媒介
进行上传储存和传输二进制数据,从而编码转化方法(js)
atob()
:解码btoa()
:编码实际应用场景
将canvas转为base64编码格式图片
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext("2d");
const dataUrl = canvas.toDataURL();
将图片、文件等转化为base64进行传输或存储
export const FileToBase64 = (file) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
resolve(e.target.result);
};
reader.onerror = () => {
reject();
};
reader.readAsDataURL(file);
});
};
export const blobToBase64 = (blob) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
resolve(e.target.result);
};
reader.onerror = () => {
reject();
};
reader.readAsDataURL(blob);
});
};
export const base64ToBlob = (code) => {
const parts = code.split(";base64,");
const contentType = parts[0].split(":")[1];
const raw = window.atob(parts[1]);
const rawLength = raw.length;
const uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {
"type": contentType
});
};
export const base64ToFile = (code, fileName) => { const parts = code.split(";base64,"); const contentType = parts[0].split(":")[1]; const fileExt = contentType.split("/")[1]; const raw = window.atob(parts[1]); const rawLength = raw.length; const uInt8Array = new Uint8Array(rawLength); for (let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new File([uInt8Array], `${ fileName }.${ fileExt }`, { "type": contentType }); };
export const blobToArrayBuffer = (blob) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
resolve(e.target.result);
};
reader.onerror = () => {
reject();
};
reader.readAsArrayBuffer(blob);
});
};
export const blobToArrayBuffer = (blob) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
resolve(e.target.result);
};
reader.onerror = () => {
reject();
};
reader.readAsArrayBuffer(blob);
});
};
export const fileToArrayBuffer = (file) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
resolve(e.target.result);
};
reader.onerror = () => {
reject();
};
reader.readAsArrayBuffer(file);
});
};
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。