注: 基于 react 环境,请求库引入以及方法调用仅供参考
注:图片类型支持dataUrl、base64
dataUrl 封装成 blob 地址, 封装成fromdata 上传
import Axios from 'Axios' // 引入请求库/*** 根据图片 URL 直接获取到 Blob**/convertImgToBlobviaCanvas(url, callback) {const img = new Image()img.crossOrigin = 'Anonymous' // canvas 不能处理跨域图片,如果要处理,除了服务端要开启跨域外,执行canvas操作前也要开启跨域img.onload = function() {let canvas = document.createElement('canvas')const ctx = canvas.getContext('2d')canvas.height = this.heightcanvas.width = this.widthctx.drawImage(this, 0, 0)canvas.toBlob(callback)canvas = null}img.src = url}/** 图片上传调用 */uploadImgApi(blob, callback) {const formData = new FormData()const url = "上传地址"// 接口需要的参数,根据实际需要可自行修改formData.append('uploadFile', blob)formData.append('fileName', `${ blob.name }.png`)Axios.post(url, formData).then(res => {console.log("上传成功, 获取返回地址")})}// 调用方式convertImgToBlobviaCanvas(blobUrl, (blob) => {uploadImgApi(blob)})
base64 封装成 blob地址(blob封装fromData参考上面)
/** bass64转 blob */function convertBase64UrlToBlob(urlData) {console.log('base64', urlData)var bytes = window.atob(urlData) // 去掉url的头,并转换为byte// 处理异常,将ascii码小于0的转换为大于0var ab = new ArrayBuffer(bytes.length)var ia = new Uint8Array(ab)for (var i = 0; i < bytes.length; i++) {ia[i] = bytes.charCodeAt(i)}// console.log('base转blob', URL.createObjectURL(new Blob([ab], { type: 'image/png' })))const res = URL.createObjectURL(new Blob([ab], { type: 'image/png' }))return res}
