之前我们的项目上传视频都是后台提供的接口,现在需要上传大视频因此我现在改成了基于亚马逊的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) // 获取上传视频的远程连接
}
})
}