vue canvas转base64,canvas转blob,canvas转file文件,并上传至服务器

 1、ref获取dom

<canvas ref="canvas" :width=400"  :height="400"></canvas>
<span @click="saveImg">保存图片并上传至服务器</span>

2、获取base64编码

//保存成图片 
            saveImg(){
                const canvas = this.$refs.canvas ;
                const dataURL = canvas.toDataURL('image/png');
                //这里的dataURL是一个base64字符串,也可以直接放到img的src里面展示
                let file=this.base64ImgtoFile(dataURL) //这个是base64转file的方法
                try {
                   this.UploadFile(file)
                } catch (error) {
                    console.error('上传失败:', error);
                }
            },

3、base64转file

//base64转file
            base64ImgtoFile(dataurl, filename = 'file') {
                let arr = dataurl.split(',')
                let mime = arr[0].match(/:(.*?);/)[1]
                let suffix = mime.split('/')[1]
                let bstr = atob(arr[1])
                let n = bstr.length
                let u8arr = new Uint8Array(n)
                while (n--) {
                    u8arr[n] = bstr.charCodeAt(n)
                }
                return new File([u8arr], `${filename}.${suffix}`, {
                    type: mime
                })
            },

4、file文件上传至服务器

            //file上传至服务器
             UploadFile(file) { 
                let uploadkey=localStorage.getItem('uploadkey')
                let fd = new FormData();
                fd.append('file', file);//传文件
                fd.append('type', "3");//传文件
                this.$http.post('http://www.baidu.com', fd).then((res) => {
                    //data为后端返回的上传结果,里面包含文件在服务器上的地址
                    let data = eval(res)[0];
                    console.log(data)
                    
                })
            },

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3中,你可以使用`FileReader API`和`canvas`来将Base64编码的图片数据换为真正的图片,并将其显示在页面上。这里是一个简单的示例: 首先,你需要安装一个叫做`vue-file-preview`的轻量级库,它可以帮助处理文件预览。你可以使用npm或yarn来安装: ```bash npm install vue-file-preview # 或者 yarn add vue-file-preview ``` 然后,在组件中引入并使用它: ```html <!-- 引入样式 --> <link rel="stylesheet" href="@/node_modules/vue-file-preview/dist/file-preview.css" /> <!-- 在template中使用 --> <template> <div> <file-preview ref="preview" :file="fileToPreview" /> </div> </template> <script> import { ref } from 'vue'; import FilePreview from 'vue-file-preview'; export default { components: { FilePreview }, setup() { const fileToPreview = ref(null); // 当Base64字符串可用时,调用这个方法换并设置到组件 const convertBase64ToImage = async (base64Data) => { try { const blob = await atob(base64Data); const reader = new FileReader(); reader.readAsDataURL(blob); reader.onload = async () => { const imgBlob = new Blob([reader.result.slice(reader.result.indexOf(',') + 1)], { type: 'image/jpeg' // 或者根据实际的图片类型调整 }); setFileToPreview(URL.createObjectURL(imgBlob)); // 设置到组件的引用中 }; } catch (error) { console.error('Error converting Base64 to image:', error); } }; return { fileToPreview, convertBase64ToImage // 如果你有一个Base64字符串,可以在这里调用它 }; } }; </script> ``` 在这个例子中,`fileToPreview`是一个Vue ref,用来存储图片的URL。`convertBase64ToImage`函数接收一个Base64字符串,解码后换为Blob对象,再创建一个URL对象来展示图片。 相关问题: 1. 为什么需要`FileReader API`? 2. `URL.createObjectURL`的作用是什么? 3. 如何处理Base64字符串失效的情况?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值