项目场景:
uniapp 上传视频阿里OSS对象存储
需求描述:
H5移动端开发中需要用户上传2秒左右视频的需求时。需要将视频上传至阿里oss中存储,并且下载到当前页面进行展示。
解决方案:
需要用到的依赖包:
1
| npm install ali-oss --save
|
创建一个 upload.js 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| const OSS = require("ali-oss");
var client = new OSS({ region: "oss-cn-beijing", endpoint: "https://oss-cn-beijing.aliyuncs.com", accessKeyId: "xxxxxxxxxxxxxxxxxx", accessKeySecret: "xxxxxxxxxxxxxxxxxxxxx", bucket: "xxxx", secure: true });
export function uploadVid(e, filename) { return new Promise((resolve, reject) => { uni.showLoading({ title: '正在上传...' }); if (e.tempFile.length == 0) { uni.hideLoading(); uni.showToast({ title: '未找到视频', icon: 'none' }) return false; }; let file = e.tempFile; if (file.size > 20971520) { uni.showToast({ title: "您上传的视频文件过大,请重新上传1-2秒的人脸视频!", icon: "none" }); return false } let time = new Date(), y, m, d; y = time.getFullYear(); m = String(time.getMonth() + 1).length === 2 ? time.getMonth() + 1 : "0" + (time.getMonth() + 1); d = tring(time.getDate()).length === 2 ? time.getDate() : "0" + time.getDate(); let dfilefold = y + m + d; let r = Math.random().toString(16).substr(2); let name = filename + dfilefold + "/" + r + ".mp4"; client.multipartUpload(name, file).then(function(result) { uni.hideLoading(); uni.showToast({ title: "上传成功,请点击提交", icon: "none" }) let url = result.res.requestUrls[0]; var index = url.indexOf("?"); url = url.substring(0, index); resolve(url); }) .catch((err) => { uni.hideLoading(); uni.showToast({ title: "上传失败", icon: "none" }) reject(err) }); }).catch(err => { reject(err) }) }
|
在uniapp 项目组件中
1 2 3 4 5 6 7 8 9 10 11 12
| <template> <view class=""> <view class=""> 视频认证(上传1-2秒左右人脸视频): </view> <view class=""> <video style="height: 310rpx;" :src="personVideo" controls /> <button @tap="uploadVidfn('realname/')">上传视频</button> </view> </view> </template>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <script> import {uploadVid} from "../utils/upload.js"; export default { data() { return { personVideo: "", }; }, methods:{ uploadVidfn(filename) { let that = this; uni.chooseVideo({ success: (res) => { uploadVid(res, filename).then(res => { that.personVideo = res; }); } }) }, } </script>
|