开发者社区> 问答> 正文

VOD-视频点播视频stsToken分片上传,vue的demo有吗?

VOD-视频点播视频stsToken分片上传,vue的demo有吗?

展开
收起
三分钟热度的鱼 2023-06-12 20:20:22 67 0
2 条回答
写回答
取消 提交回答
  • 是的,阿里云官方提供了基于 Vue.js 的视频点播上传示例,你可以前往阿里云官网下载示例代码,然后根据自己的需求进行修改和适配。

    示例代码下载地址:https://help.aliyun.com/document_detail/93750.html

    在示例代码中,你需要修改的地方主要有以下几个:

    1. src/components/VideoUpload.vue 文件中,修改 accessKeyIdaccessKeySecretstsToken 为你自己的值。

    2. src/components/VideoUpload.vue 文件中,修改 regionbucketendpoint 为你自己的值。

    3. src/components/VideoUpload.vue 文件中,修改 key 为你要上传的文件名。

    4. src/components/VideoUpload.vue 文件中,修改 policysignature 为你自己的值。

    5. src/components/VideoUpload.vue 文件中,修改 file 为你要上传的文件对象。

    6. src/components/VideoUpload.vue 文件中,根据自己的需求修改上传进度条和上传成功后的回调函数。

    修改完成后,你可以通过运行以下命令来启动示例程序:

    npm install
    npm run serve
    

    然后在浏览器中访问 http://localhost:8080 即可查看示例程序。

    2023-06-13 11:17:11
    赞同 展开评论 打赏
  • 以下是Vue的VOD-视频点播视频stsToken分片上传的示例代码,供参考:

    <template>
      <div class="upload-container">
        <div class="upload-box">
          <input type="file" ref="fileInput" @change="handleFileChange">
          <el-button type="primary" @click="startUpload">开始上传</el-button>
        </div>
        <el-progress :percentage="percent" status="active"></el-progress>
      </div>
    </template>
    
    <script>
    import { getUploadAuth } from '@/api/vod'
    
    export default {
      data() {
        return {
          uploadAuth: null,
          uploadAddress: null,
          videoId: '',
          percent: 0,
          file: null
        }
      },
      methods: {
        async handleFileChange() {
          this.file = this.$refs.fileInput.files[0]
          const res = await getUploadAuth()
          this.uploadAuth = res.data.uploadAuth
          this.uploadAddress = res.data.uploadAddress
          this.videoId = res.data.videoId
        },
        startUpload() {
          const fileSize = this.file.size
          const chunkSize = 1 * 1024 * 1024 // 1MB
          const chunkCount = Math.ceil(fileSize / chunkSize)
          let uploadedCount = 0
          let fileReader = new FileReader()
          let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
          let start = 0
          let end = chunkSize
          let uploadPart = (index) => {
            if (index >= chunkCount) {
              this.completeUpload()
              return
            }
            let chunk = blobSlice.call(this.file, start, end)
            let formData = new FormData()
            formData.append('FileName', this.file.name)
            formData.append('OSSAccessKeyId', this.uploadAuth.accessKeyId)
            formData.append('Expires', this.uploadAuth.expireTime)
            formData.append('Signature', this.uploadAuth.signature)
            formData.append('key', ${this.uploadAuth.dir}/${this.videoId}/${index}.mp4)
            formData.append('policy', this.uploadAuth.policy)
            formData.append('partNumber', index + 1)
            formData.append('uploadId', this.uploadAuth.uploadId)
            formData.append('file', chunk)
            this.$axios.post(this.uploadAddress, formData, {
              headers: {
                'Content-Type': 'multipart/form-data'
              },
              onUploadProgress: (progressEvent) => {
                if (progressEvent.lengthComputable) {
                  this.percent = Math.round((uploadedCount + progressEvent.loaded) / fileSize * 100)
                }
              }
            }).then(() => {
              uploadedCount++
              start = end
              end = start + chunkSize
              uploadPart(uploadedCount)
            }).catch(() => {
              this.$message.error('上传失败')
            })
          }
          uploadPart(0)
        },
        completeUpload() {
          this.$axios.post('/vod/video/complete-upload', {
            videoId: this.videoId
          }).then(() => {
            this.$message.success('上传成功')
          }).catch(() => {
            this.$message.error('上传失败')
          })
        }
      }
    }
    </script>
    

    需要注意的是,此示例代码需要根据实际情况进行适当修改。同时在使用过程中,需要提前获取上传凭证(uploadAuth)和上传地址(uploadAddress),并将其作为参数传递给后端进行验证。

    2023-06-13 08:15:52
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
互联网音视频点播业务云上实践 立即下载
Vue.js在前端服务化上的实践与探索 立即下载
《VoD问题排查与实战手册》 立即下载