vue图片转为File文件类型
供参考,欢迎指教
步骤:
- 先把
图片路径
转为base64
格式 - 再把
base64
转为File文件
图片转为base64格式
这里把方法定义js文件中,根据需要自行调整
export const imageToBase64 = (img) => {
// Vue.prototype.$imageToBase64 = 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);
var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
var dataURL = canvas.toDataURL("image/jpeg" + ext);
return dataURL;
};
base64格式转为File文件类型
export const base64ToFile = (urlData, fileName) => {
let arr = urlData.split(',');
let mime = arr[0].match(/:(.*?);/)[1];
let bytes = atob(arr[1]); // 解码base64
let n = bytes.length
let ia = new Uint8Array(n);
while (n--) {
ia[n] = bytes.charCodeAt(n);
}
return new File([ia], fileName, { type: mime });
}
使用
- 引入
js
文件
import { imageToBase64, base64ToFile } from "@/api/commonApi";
created() {
//调用方法 【url仅参考】
let url = 'https://testwq.jk.net/uploads/20200701/111fa8095def5bd296332f7eac01e400.jpg';
this.handleImgToBase64(url, (res) => {
// 接收回调结果
console.log('回调结果', res);
});
},
methods: {
/**
* url: 图片路径
* cb: callback
*/
handleImgToBase64(url, cb) {
let that = this;
var image = new Image();
image.crossOrigin = '';
image.src = url;
image.onload = function () {
let base64 = imageToBase64(image); //图片转base64
let file = base64ToFile(base64, 'file'); //base64转File
// 根据自身需求调整【因个人项目逻辑不一样,这里使用回调函数】
cb && typeof cb == 'function' && cb(file);
return file;
}
},
}
File文件转base64格式
通过
FileReader
对象读取存储文件内容。
说明:
readAsDataURL
方法会读取指定的 Blob
或 File
对象。读取操作完成的时候,readyState
会变成已完成DONE
,并触发 loadend
事件,同时 result
属性将包含一个data:
URL格式的字符串(base64编码)以表示所读取文件的内容
/**
* file: file文件
*/
base64(file) {
return new Promise(function(resolve, reject) {
let reader = new FileReader();
let imgResult = "";
reader.readAsDataURL(file);
reader.onload = function() {
imgResult = reader.result;
};
reader.onerror = function(error) {
reject(error);
};
reader.onloadend = function() {
resolve(imgResult);
};
});
}
使用
<input type="file" @change="previewFile">
var file = e.target.files[0];
this.base64(file);