思路:a标签的download属性的使用
window.URL.createObjectURL()生成DOMString的使用,参考文献:https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createObjectURL
文本类本地下载(和服务端无交互)
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- <img class="grayscale" src="myPicture.png" alt="Description of my picture" /> --></head><body><script>var file = new File(["i'm very happy beacuse i hava learn how to use js "], "footxt", {type: "text/plain",});var blob = new Blob(['ni hao '], { 'type': 'text\/xml' });vetruLabel("a","exported.txt", blob);function vetruLabel(lableName,FileName,fileContent){var a = document.createElement(lableName);//URL.createObjectURL() 静态方法会创建一个 DOMString,DOMString 是一个UTF-16字符串。由于JavaScript已经使用了这样的字符串,//所以DOMString 直接映射到 一个String 链接地址:https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createObjectURLa.href = window.URL.createObjectURL(fileContent);a.innerText = '下载';document.body.appendChild(a)a.download = FileName;}</script></body></html>
图片类本地下载(和服务端无交互)
适用于服务端返回的是dataUrl格式的数据
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><script>function vetruLabel(lableName, FileName, fileContent) {var a = document.createElement(lableName);//URL.createObjectURL() 静态方法会创建一个 DOMString,DOMString 是一个UTF-16字符串。由于JavaScript已经使用了这样的字符串,//所以DOMString 直接映射到 一个String 链接地址:https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createObjectURLa.href = window.URL.createObjectURL(fileContent);a.innerText = '下载';document.body.appendChild(a)a.download = FileName;}/**** dataUrl转Bolb* */function dataURLtoBlob(dataurl) {var arr = dataurl.split(","), mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });}var blob = dataURLtoBlob('data:image/jpeg;base64,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');vetruLabel("a", "exported.png", blob);</script></body></html>
服务端交互需要的操作
上传数据
网络图像文件转Base64字符串
/***img 为dom元素**/function getBase64Image(img) {var canvas = document.createElement("canvas");canvas.width = img.width;canvas.height = img.height;var ctx = canvas.getContext("2d");ctx.drawImage(img, 0, 0, img.width, img.height);//获取图片的格式(png jpg)var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();var dataURL = canvas.toDataURL("image/" + ext);return dataURL;}
Base64字符串转二进制
/***dataurl 为base64字符串**/function dataURLtoBlob(dataurl) {var arr = dataurl.split(','),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}console.log(new Blob([u8arr], {type: mime}))return new Blob([u8arr], {type: mime});}
下载并显示
base64设置到img标签显示
document.getElementById('img').setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0 DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==');
JS字符串和二进制相互转换
string —> binary array
方法一
var str = 'test string.';var arr = Array.prototype.map.call( str , function( c ) { return c.charCodeAt(0); } );
方式二
const encoder = new TextEncoder()const view = encoder.encode('taowuhua,真帅')
binary array —> string
String.fromCharCode.apply( null , arr );
数组转为字符串
方式一
String(arr).replace(/,/g, "")
方式二
arr.join("")
对象转字符串
var obi = {'name':'taowuhua'}console.log(JSON.stringify(obi))
判断数组中是否存在某个值
如果存在返回数组元素的下标,否则返回-1
let arr = ['apple', 'banana', 'fruit', 'origin'];let index = arr.indexOf('apple');
