zoukankan      html  css  js  c++  java
  • 七牛云视频上传

    1、七牛云存储使用参考文档

    # 七牛云管理后台地址
    https://portal.qiniu.com/kodo/bucket
    # 七牛云使用
    https://developer.qiniu.com/kodo/manual/1233/console-quickstart
    
    # pythonSDK
    https://developer.qiniu.com/kodo/sdk/1242/python
    # Node.js SDK V6
    https://developer.qiniu.com/kodo/sdk/3828/node-js-v6
    # JavaScript SDK历史文档1.x
    https://developer.qiniu.com/kodo/sdk/4244/the-javascript-sdk-historical-documents-1-x
    

      2、七牛云介绍

          1. 以前看见过FastDfs+FFmpeg进行视频存储等操作,但是这种方式稳定性会低一些,而且成本也没有降低。

          2. 市面上关于云存储的第三方服务比比皆是,最著名的无疑就是七牛云存储,本次我们将演示用django+Vue+七牛云进行视频存储与播放。      

      3、七牛云上传逻辑

          1. 在做七牛云的文件上传时,很多人有一个误区,就是以为是前端先上传到后台服务器,然后后台服务器再将文件上传到七牛云。

          2. 这个逻辑本身没有问题,但是会遇到一个问题,如果文件大会导致上传很慢

          3. 正确逻辑应该是前端直接上传七牛,而后台只承担生成token和存储七牛云返回的hash的任务。

    1.2 django+JavaScript上传视频

      1、参考七牛云SDK

    # pythonSDK
    https://developer.qiniu.com/kodo/sdk/1242/python# JavaScript SDK历史文档1.x
    https://developer.qiniu.com/kodo/sdk/4244/the-javascript-sdk-historical-documents-1-x# JavaScript 官方demohttps://github.com/qiniu/js-sdk/tree/1.x#demo
    

      2、代码

    from django.shortcuts import render,HttpResponse
    from django.views import View
    import json
    
    '''获取上传token'''
    class QNYTokenView(View):
        def get(self,request):
            from qiniu import Auth, put_file, etag
            import qiniu.config
            # 需要填写你的 Access Key 和 Secret Key
            access_key = 's-hjo_Y5PSl***************lNLzTNrCig_0dN'
            secret_key = 'dnMGngbNbFK***************l_XFlo49lc4YyM'
            # 构建鉴权对象
            q = Auth(access_key, secret_key)
            # 要上传的空间
            bucket_name = '460-chao'
            # 生成上传 Token,可以指定过期时间等
            token = q.upload_token(bucket_name, expires=3600)
            return HttpResponse(json.dumps({'uptoken': token}, ensure_ascii=False))
            
    

    1.3 vue+django上传视频

       *参考代码:*https://gitee.com/edushiyanlou/QiniuUploader

      1、前端Vue代码

    vue init webpack qiniuVue              # 初始化一个vue前端项目
    npm install --save axios               # 安装axios
    npm install  --save  jquery@1.12.1     # 安装jquery
    

    django代码样式

    from django.shortcuts import render,HttpResponse
    from django.views import View
    import json
    
    '''获取上传token'''
    class QNYTokenView(View):
        def get(self,request):
            from qiniu import Auth, put_file, etag
            import qiniu.config
            # 需要填写你的 Access Key 和 Secret Key
           access_key = 's-hjo_Y5PSl***************lNLzTNrCig_0dN'
            secret_key = 'dnMGngbNbFK***************l_XFlo49lc4YyM'
            # 构建鉴权对象
            q = Auth(access_key, secret_key)
            # 要上传的空间
            bucket_name = '460-chao'
            # 生成上传 Token,可以指定过期时间等
            token = q.upload_token(bucket_name, expires=3600)
            return HttpResponse(json.dumps({'uptoken': token}, ensure_ascii=False))
    
    
    

    vue代码样式

    <template>
      <div>
          <input type="file" name='upFile' id="upFile" @change='changeFile($event)'>
          <input type="button" name="开始上传" value="开始上传" @click='uploadFile()'>
          <img v-if="coverUrl" :src="coverUrl" alt="封面">
          <el-progress :percentage="filePercent"></el-progress>
          {{filePercent}}
      </div>
    </template>
    <script>
    import * as qiniu from "qiniu-js";
     
    export default {
      name:'qiniu',
      data() {
        return {
          file:null,
          videoUrl:null,
          coverUrl:null,
          filePercent:0
        };
      },
      methods: {
        changeFile(e){
        //   获取文件
          this.file = e.target.files[0];
        },
        uploadFile() {
        // 当前VUE中的this 是指向实例,相当于父级,指向指不到子级中。所需需要一个变量 _this 存储this得指向。
          let _this = this
        // 获取身份的token
          let token = 's-hjo_Y5PSlHGOaMLn-NfKHmxrlNLzTNrCig_0dN:fXoqUiOuAYEWnsGws3dLmJXnL80=:eyJzY29wZSI6IjQ2MC1jaGFvIiwiZGVhZGxpbmUiOjE2MDQ5MjYyNTB9',
        // 上传时的配置
          var config = {
            useCdnDomain: true
          };
        //  设置文件的配置
          var putExtra = {
            fname: "",
            params: {},
            mimeType: null
          };
    
        //   实例化七牛云的上传实例
          var observable = qiniu.upload(_this.file, null, token, putExtra, config);
        //   设置实例的监听对象
          var observer = {
            //   接收上传进度信息
            next(res) {
                // 上传进度
                _this.filePercent = parseInt(res.total.percent) 
                if(_this.filePercent==100){
                    console.log("success")
                } 
            },
            // 接收上传错误信息
            error(err) {
              console.log(err)
            },
    
            // 接收上传完成后的信息
            complete(res) {
                 console.log(res.key)
            }
          };
          // 上传开始
          var subscription = observable.subscribe(observer); 
        }
        
      }
    };
    </script>
    
  • 相关阅读:
    get_json_object 用法
    vim中的特殊字符
    vim常用命令
    mac下如何配置用户的环境变量
    vim如何替换^M ?
    git ssh 配置
    mac上pip install时提示/System/Library/... 无权限
    mysql语句--table中某列有多值时,删除其他,仅保留1条
    mysql语句如何把多行的数据合并到一行?
    微服务分布式电商项目学习笔记(二)---- 微服务架构图+微服务划分图(2020/7/1)
  • 原文地址:https://www.cnblogs.com/chao460/p/13951953.html
Copyright © 2011-2022 走看看