注: 基于 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.height
canvas.width = this.width
ctx.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的转换为大于0
var 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
}