基于AWS和Vue上传视频,多分块上传视频

11 篇文章 0 订阅

之前我们的项目上传视频都是后台提供的接口,现在需要上传大视频因此我现在改成了基于亚马逊的AWS上传视频

1、安装和引入AWS.S3

npm i aws-sdk  // 安装aws-sdk
import AWS from 'aws-sdk'     // vue文件引入

2、需要后台提供获取临时tooken的接口

this.$get(url,{}).then(res => {
    if (res.data.code === '0') {
        this.s3 = new AWS.S3({    // 只能通过AWS.S3的构造函数,创建
            region: 'cn-north-1',
            sessionToken: ,    // 从后台获取数据
            accessKeysId: ,    // 从后台获取数据
            secretAccessKey: , // 从后台获取数据
        })
    }
})

3、选择视频点击上传按钮

let that = this;
if (file) {
    // 获取文件后缀名
    let fileName = file.name.lastIndexOf(".");
    let fileNameLength = file.name.length;
    let suffix = file.name.substring(fileName + 1, fileNameLength);
    // 设置上传AWS的参数
    let params = {
        Key: `${this.urlKey}${formatDateTime(new Data, 7)}/${fonmateDateTime(new Date(), 8).${suffix}}`,    // 对上传远程文件的添加时间戳, urlKey为远程地址
        ContentType: file.type,
        'Access-Control-Allow-Credentials': '*'
    }
    // 设置上传配置和获取进去进度条数据
    let upload = this.s3.upload(params, {
        queueSize: 3,    // 设置一次上传分块的数量
        connectionTimeout: 60 * 60 * 1000 * 4, // 设置超时的时间
        partSize: 5 * 1024 * 1024    // 设置分块的大小
        httpOptions: {
            timeout: 60 * 60 * 1000 * 4
        }
    }).on('httpUploadProgress', (e) => {
        let per = parseInt(e.loaded, 10) / parseInt(e.total, 10);
        pre = Number((per *100).toFixed(2));
        setTimeout(() => {
            that.percent = per;
        })
    })
    upload.send((err, data) => {
        if (err) {
            that.$message.warning(`${err.code, err.message}`)
        } else {
            console.log(data.location)  // 获取上传视频的远程连接
        }
    })
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值