UNPKG

blob-url-file

Version:

transformation functions of file/blob/base64

1 lines 2.07 kB
function request(i){return new Promise((o,n)=>{const{url:r,data:e={},method:t="GET"}=i;i.url||n(new Error("Url 不存在"));const a=new FormData;for(var l in e)a.append(l,e[l]);const s=new XMLHttpRequest;s.onreadystatechange=function(){4===s.readyState&&(200===s.status?o(s.response):n(new Error("请求不到"+r+" 的文件")))},s.onerror=function(){n(new Error("请求不到"+r+" 的文件"))},s.open(t.toUpperCase(),r),s.responseType="blob",s.send(a)})}const blobToBase64=function(e){return new Promise((n,o)=>{const r=new FileReader;r.onload=o=>{n(o.target.result)},r.readAsDataURL(e),r.onerror=()=>{o(new Error("文件流异常"))}})},urlToBase64=function(o){o=o.split(",");return atob(o[1])},urlToBlob=function(o){const n=o.split(",");var r=n[0].match(/:(.*?);/)[1],o=n[1];return base64ToBlob({o:o,contentType:r})},base64ToBlob=function({b64Data:s="",contentType:i="",sliceSize:c=512,name:u=""}){return new Promise((o,n)=>{try{const e=atob(s),t=[];for(let o=0;o<e.length;o+=c){const a=e.slice(o,o+c),l=[];for(let o=0;o<a.length;o++)l.push(a.charCodeAt(o));t.push(new Uint8Array(l))}var r=new Blob(t,{type:i});o(r=Object.assign(r,{t:URL.createObjectURL(r),name:u}))}catch(o){n(new Error("base64 错误"))}})},isValidString=o=>!!o&&"string"==typeof o,imageUrlToBase64=function(e){return new Promise((n,o)=>{const r=new Image;r.onload=function(){const o=document.createElement("canvas");o.width=this.naturalWidth,o.height=this.naturalHeight,o.getContext("2d").drawImage(r,0,0),n(o.toDataURL())},r.setAttribute("crossOrigin","Anonymous"),r.src=e,r.onerror=()=>{o(new Error("图片流异常"))}})},fileUrlToUrl=function(o){return new Promise((n,r)=>{try{request({url:o}).then(o=>{n(URL.createObjectURL(o))}).catch(o=>{r(o)})}catch(o){r(new Error("请求不到文件"))}})},downloadFile=async function(o,n){return fileUrlToUrl(o).then(o=>{toDownload(o,n)}).catch(o=>o.message||o)},toDownload=(o,n)=>{const r=document.createElement("a");r.href=o,r.download=n,r.click(),r.remove()};export{blobToBase64,urlToBase64,urlToBlob,base64ToBlob,fileUrlToUrl,downloadFile,toDownload};