上传视频到阿里云OSS并获取视频时长
创始人
2024-11-15 14:09:56
0

使用阿里云sdk,前端页面直传视频文件阿里云OSS存储,文件不需要经过服务端。

技术栈

前端:html、js、layui

服务端:Springboot

1、html页面创建元素

  

2、获取OSS的Token方法

(1)前端:ajax方式请求服务端获取阿里云OSS的token

    async function getSysToken() {         return new Promise((resolve, reject) => {             $.ajax({                 type: 'get',                 url: '/api/upload/stsToken',                 data: {id: userId},                 contentType: 'application/json',                 success: function (res) {                     if (res.code == 0) {                         let stsToken = {                             region: res.data.region,                             accessKeyId: res.data.accessKeyId,                             accessKeySecret: res.data.accessKeySecret,                             bucket: res.data.bucket,                             stsToken: res.data.securityToken                         };                         let client = new OSS(stsToken);                         resolve({client: client})                     } else {                         layer.msg('stsToken获取失败')                     }                 }             });         })     }

(2)服务端:通过自建配置文件类OSSProperties,获取yaml中阿里云OSS配置

@Resource private OSSProperties OSS;  @RequestMapping("stsToken") public Result stsToken(User user) { 		// 自定义角色会话名称,用来区分不同的令牌,例如可填写为SessionTest。 		String roleSessionName = "RamOssTest" + (Objects.nonNull(user.getId()) ? user.getId() : new Random().nextInt(10000)); 		String policy = "{\n" + 				"    \"Version\": \"1\",\n" + 				"    \"Statement\": [\n" + 				"        {\n" + 				"            \"Effect\": \"Allow\",\n" + 				"            \"Action\": \"oss:*\",\n" + 				"            \"Resource\": [\n" + 				"                \"acs:oss:*:*:" + OSS.getBucketName() + "/" + OSS.getFile() + "\"\n" + 				"            ]\n" + 				"        }\n" + 				"    ]\n" + 				"}"; 		try { 			String regionId = OSS.getEndPoint().split("\\.")[0].split("oss-")[1]; 			// 添加endpoint。 			DefaultProfile.addEndpoint(regionId, OSS.getBucketName(), OSS.getEndPoint()); 			// 构造default profile。 			IClientProfile profile = DefaultProfile.getProfile(regionId, OSS.getAccessKeyId(), OSS.getAccessKeySecret()); 			// 构造client。 			DefaultAcsClient client = new DefaultAcsClient(profile); 			final AssumeRoleRequest request = new AssumeRoleRequest(); 			request.setSysMethod(MethodType.POST); 			request.setRoleArn(OSS.getArn()); 			request.setRoleSessionName(roleSessionName); 			request.setPolicy(null); 			request.setDurationSeconds(OSS.getTimeout()); 			final AssumeRoleResponse response = client.getAcsResponse(request); 			STSToken stsToken = new STSToken(response.getCredentials().getExpiration(), response.getCredentials().getAccessKeyId(), response.getCredentials().getAccessKeySecret(), response.getCredentials().getSecurityToken(), "oss-" + regionId, OSS.getBucketName(), new Date().getTime() + OSS.getTimeout() * 1000); 			return Result.ok().data(stsToken); 		} catch (ClientException e) { 			System.out.println("Failed:"); 			System.out.println("Error code: " + e.getErrCode()); 			System.out.println("Error message: " + e.getErrMsg()); 			System.out.println("RequestId: " + e.getRequestId()); 			return Result.error(e.getMessage()); 		} 	}

3、前端上传按钮,绑定点击方法为以下操作。点击

注意,重点是添加监听!!

let client = (await getSysToken()).client;                 client.multipartUpload(fileName, file, {                     progress: function(p, checkpoint) {                     // 上传进度条                         element.progress('progressBar', (p * 100).toFixed(2) + '%');                         if (p == 1) {                             $("input[name='file']").val('');                         }                     }                 }).then(function(res) {                     let vUrl = res.res.requestUrls[0].split("?")[0];                     $("#videoUrl").val(vUrl);                     // 获取

4、前端,获取时长的js方法

上传视频文件后,就可以调用获取时长方法,返回的时间格式:mm:SS,例如23:10,23分10秒

function getDuration(){         var time = document.getElementById("duration").value;         //如果不是数字则返回原值         var isNumeric = !isNaN(parseFloat(time)) && isFinite(time);         if(!isNumeric){             return time;         }         var totalSecond = Math.floor(time);         var minute = "00";         // 得到分钟数加秒数         if (totalSecond > 60){             minute = Math.floor(totalSecond / 60) ;             if (minute < 10) {                 minute = "0" + minute;             }         }         var sec = totalSecond%60;         if(sec < 10){             sec = "0"+sec;         }         var finalDuration = minute + ":"+sec;         return finalDuration;     }

相关内容

热门资讯

一秒了解”神盾大新获得房卡链接... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
秒懂教程!微信里面炸金花房卡哪... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享...
分享经验”王者大厅房卡获取“牛... 分享经验”王者大厅房卡获取“牛牛房卡哪里有卖游戏中心打开微信,添加客服【113857776】,进入游...
秒懂教程!微信里面炸金花链接房... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享...
分享经验”牛牛获得房卡链接渠道... 分享经验”牛牛获得房卡链接渠道“新老夫子房间卡怎么购买 微信牛牛房卡客服微信号微信游戏中心打开微信,...
秒懂教程!在哪里买拼三张微信房... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享...
一秒了解”贝壳互娱怎么买房卡“... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
一分钟实测分享”牛牛房卡获取“... 房卡获取是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房卡...
秒懂教程!微信玩链接拼三张房卡... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享...
玩家攻略”新竹大厅房卡多少米“... 玩家攻略”新竹大厅房卡多少米“牛牛房卡批发市场微信房卡充值 添加房卡批售商:微【113857776】...
秒懂教程!微信牛牛房卡找谁买,... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享受...
1分秒分析”微友约局获得房卡链... 1分秒分析”微友约局获得房卡链接渠道“金花牛牛房卡充值游戏中心打开微信,添加客服【113857776...
秒懂教程!微信里玩拼三张房卡在... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享...
秒懂普及”新海岛大厅房卡“拼十... 来教大家如何使用房卡充值房卡充值 添加房卡批售商:微【113857775】复制到微信搜索、直接添加房...
秒懂教程!想找个微信牛牛房卡在... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享受...
秒懂教程!微信玩链接牛牛房卡,... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享受...
一分钟实测分享”海贝之城如何购... 一分钟实测分享”海贝之城如何购买房卡“哪里有详细房卡介绍微信房卡充值 添加房卡批售商:微【11385...
秒懂教程!拼三张房卡多少钱一张... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享...
玩家攻略”鲨鱼众娱房卡“新猴王... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
秒懂教程!微信玩炸金花房卡链接... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享...