base64转blob,文件格式不合法

当前将裁剪后的base64图片转为blob,然后上传到后端,但接口返回文件格式不合法
后端解析的时候,发现这个blob的文件名并不是我当时设置的名字,格式后缀也没有了(大概就是file-d8q3uiaehdfj这样子)。
请问有人知道是怎么回事吗??

file对象也没有问题

image.png

相关代码

image.png

阅读 2.9k
2 个回答

这个不是转成 url 吗?传给后端应该直接用 new Blob([u8arr], {type: mime})

一般上传给后端的都是用 formData 上传的 file 吧:

// 上传文件
async saveFile() {
    let formData = new FormData();
    formData.append('file', this.base64ConvertFile(this.base64Src, 'poster'));
    let config = {
        headers: {'Content-Type': 'multipart/form-data'},
    }
    const res = await this.axios.post('/api/upload/file', formData, config).then(({status, data})=> {
        if (data.status == 200) {
            //TODO::
            return true;
        } else {
            this.$toast(data.errmsg);
        }
        return false;
    });
    return res;
},
base64ConvertFile(urlData, filename) { // 64转file
    if (typeof urlData != 'string') {
        this.$toast("urlData不是字符串")
        return;
    }
    var arr = urlData.split(',')
    var type = arr[0].match(/:(.*?);/)[1]
    var fileExt = type.split('/')[1]
    var bstr = atob(arr[1])
    var n = bstr.length
    var u8arr = new Uint8Array(n)
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], `${filename}.${fileExt}`, {type});
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题