el-upload组件如何上传blob格式的url地址视频

el-upload组件如何上传blob格式的url地址视频


需求:想把视频地址url:“blob:http://localhost:8083/65bd3c0f-52ec-4844-b85e-06fdb5095b7b”,通过el-upload组件上传

el-upload是Element UI中用于文件上传的组件,通常用于上传本地文件。如果需要上传url地址而不是本地文件也是可以的,需要自己封装一下

一、存在问题

正常el-upload上传本地文件参数是
在这里插入图片描述
如果把 Blob 转换为 File就可以上传了

二、直接上代码

        //点击保存上传视频
        saveRecording() {
           //创建了 Blob 对象并将其添加到 FormData 中
            const blob = new Blob([this.videoUrl], { type: 'text/plain' });
            const formData = new FormData();
            formData.append('file', blob);
            formData.append('fileType', 5);//加一个额外参数
            const headers = {
                token: this.$store.state.token,
            };
            console.log(headers, 'header');
            fetch(process.env.VUE_APP_WEB_API + `/上传接口`, {
                method: 'POST',
                headers,
                body: formData,
            })
                .then(res => {
                    return res.json(); // Assuming response is JSON format
                })
                .then(({ data }) => {
                    if (data.url) {
                        this.$message({
                            type: 'success',
                            message: '添加成功!',

                            showClose: true,
                            offset: 80,
                        });
                        this.videoData = data;
                        this.videoName = data.fileName;

                        this.sizeTime = `文件大小:${
                            this.returnSize(this.videoData.fileSize) || 0
                        }`;
                        // var elevideo = document.getElementById("videoPlay");
                        // elevideo.addEventListener("loadedmetadata", function () {
                        //   //加载数据
                        // const duration = elevideo.duration;
                        // console.log(duration,'duration');
                        //   //视频的总长度
                        //   const minutes = Math.floor(duration / 60);
                        //   const seconds = Math.floor(duration % 60);
                        //   this.sizeTime = `文件大小:${
                        //     this.returnSize(this.videoData.fileSize) || 0
                        //   } ;录屏时长:${minutes} 分钟 ${seconds} 秒`;
                        // });
                    }
                })
                .catch(error => {
                    console.error('Error:', error);
                });
        },

效果如下
在这里插入图片描述

结束了,就是这么简单~~~

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用 Element UI 的 el-upload 组件上传视频后,您可以使用视频的第一帧作为封面。以下是一个示例: ```html <template> <el-upload class="upload-demo" action="/your-upload-url" :before-upload="handleBeforeUpload" :on-success="handleSuccess" :file-list="fileList" :auto-upload="false" :limit="1" accept="video/*" > <el-button slot="trigger" size="small" type="primary">选择文件</el-button> <div slot="tip" class="el-upload__tip">只能上传视频文件</div> </el-upload> </template> <script> export default { data() { return { fileList: [] }; }, methods: { handleBeforeUpload(file) { // 清空 fileList this.fileList = []; // 获取视频文件的 URL 对象 const videoUrl = URL.createObjectURL(file); // 创建 video 元素并加载视频 const video = document.createElement('video'); video.src = videoUrl; video.currentTime = 0; video.muted = true; video.addEventListener('loadeddata', () => { // 创建 canvas 元素并绘制封面 const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, canvas.width, canvas.height); // 将 canvas 转换为 data URL,并添加到 fileList 中 canvas.toBlob((blob) => { const coverFile = new File([blob], 'cover.png'); this.fileList.push(coverFile); }, 'image/png'); // 释放资源 URL.revokeObjectURL(videoUrl); video.remove(); }); }, handleSuccess(response, file, fileList) { // 处理上传成功的逻辑 } } }; </script> <style> .upload-demo { display: flex; justify-content: center; align-items: center; height: 200px; width: 200px; border: 1px dashed #ccc; } </style> ``` 在上述示例中,我们使用了 Element UI 的 el-upload 组件来进行视频上传。在 `handleBeforeUpload` 方法中,我们获取视频文件的 URL 对象,并创建一个 video 元素加载视频。然后,我们创建一个 canvas 元素,并在其中绘制视频的第一帧作为封面。最后,我们将 canvas 转换为 data URL,并将其作为文件添加到 fileList 中。 请注意,为了确保正确获取视频的第一帧,我们需要监听 video 元素的 `loadeddata` 事件,在视频加载完成后才进行绘制操作。 您可以根据需要自定义样式和上传逻辑。确保将 `/your-upload-url` 替换为您实际的上传接口地址

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值