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 方法会读取指定的 BlobFile 对象。读取操作完成的时候,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);
返回格式效果图

在这里插入图片描述

Logo

前往低代码交流专区

更多推荐