vue2前端阿里云oss服务端签名直传

官方地址:如何进行服务端签名直传_对象存储(OSS)-阿里云帮助中心

前端具体实现:

html 复制代码
<div v-if="!uploadVideoFlag">
    <el-button size="small" class="upload-btn" icon="el-icon-loading">
        上传中
    </el-button>
</div>
<div v-if="uploadVideoFlag">
    <el-upload
        :http-request="uploadVideo"
        action="#"
        :limit="1"
        :file-list="fileVideoList"
        accept=".mp4"
        >
            <el-button size="small" type="primary" class="upload-btn">
                上传视频
            </el-button>
            <div slot="tip" class="el-upload__tip">只能上传 MP4 文件</div>
    </el-upload>
</div>
javascript 复制代码
// 上传视频
    uploadVideo(file) {
      var video = file.file.name.substring(file.file.name.lastIndexOf(".") + 1);
      const suffix = video === "mp4";
      if (!suffix) {
        this.form.chapterUrl = undefined;
        this.fileVideoList = [];
        this.$message.warning("必须上传 MP4 格式的视频!");
        return;
      }
      generatePresignedUrlApi().then((res) => {
        this.uploadVideoFlag = false;
        let keyFileName = res.data.dir + this.getFileNameUUID() + "." + video;
        let formData = new FormData();
        formData.append("success_action_status", "200"); // 指定成功上传时,服务端返回状态码200,默认返回204。
        formData.append("policy", res.data.policy);
        formData.append("signature", res.data.signature);
        formData.append("OSSAccessKeyId", res.data.OSSAccessKeyId);
        formData.append("key", keyFileName); // 文件名
        formData.append("file", file.file); // file必须为最后一个表单域
        const param = {
          method: "POST",
          body: formData,
        };
        fetch(res.data.host, param)
          .then((data) => {
            this.uploadVideoFlag = true;
            this.$message.success("上传成功");
            // 视频数组:
            this.fileVideoList.length = 1;
            // 视频地址:
            this.form.chapterUrl = res.data.host + keyFileName;
          })
          .catch((error) => {
            console.error("Error:", error);
          });
      });
    },

    // 唯一uuid
    getFileNameUUID() {
      function rx() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
      }
      return `${+new Date()}${rx()}${rx()}`;
    },

generatePresignedUrlApi是由后端提供的接口 来获取密钥

相关推荐
一拳不是超人2 分钟前
做独立开发三个月,我的第一个产品终于有了 1000 个用户
前端·程序员
Amos_Web12 分钟前
Rspack 源码解析(十):Hash 与 Asset 生成
前端·rust·源码阅读
福兮说14 分钟前
用 IndexedDB 存用户的文件,我踩过的五个坑
前端·javascript
闪耀之光M7815 分钟前
前端依赖自动导入:unplugin-auto-import
前端
Ricon组态薄荷糖29 分钟前
Ricon组态系统:工业组件开发指南与实践
前端·后端·物联网
flash俊杰34 分钟前
Electron 桌面应用的进程模型:为什么 fork Next.js standalone
前端
沙蒿同学44 分钟前
我把架构约定编译成了会变红的测试:Wails v2 + Go + Vue3 桌面脚手架实战
前端·后端·github
cpolar技术支持1 小时前
本地 Playwright 测试报告怎么远程复盘?Trace Viewer 跑起来后,用 cpolar 分享失败现场
前端·自动化测试·测试工具·cpolar·playwright
wordbaby1 小时前
企业级后台管理系统路由设计与最佳实践指南
前端
胡志辉的博客1 小时前
【完全开源】IP 纯净度检测 可一键部署到自己的CF
前端·javascript·chrome·ip·chromium