最近在开发项目中,遇到需要获取视频时长的需求,合作的前端一直说获取不到,无奈作为后端只能自己动手。其实很简单,文件在选中之后,文件流中都已经包含了所有的信息,我们直接从文件流中直接获取即可。
JavaScript上传文件,如果是上传的图片,可以获取到文件的类型、后缀、大小、宽高;
如果是上传的视频,可以获取到文件的类型、后缀、大小、宽高、时长、视频的封面图(如果是上传的三方存储,路径为:上传成功之后的路径+对应三方截取视频第一帧代码;当然,也可以单独上传;);
如果是上传的音频,可以获取到文件的类型、后缀、大小、时长等。
前端在获取到这些信息之后,直接通过接口回传给后端即可,废话不多说,直接上代码。
html代码如下:
<!-- 触发上传的元素 -->
<div id="picker_{$form.name}" class="input_file_box">
<input type="file" class="input_file" title="请上传文件" onchange="uploadFile(this)">
</div>JavaScript代码如下:
<script type="text/javascript">
// 上传文件
function uploadFile(e) {
let file = e.files[0]; // 文件流
let fileName = file.name; // 文件名称
let fileSize = file.size; // 文件大小 单位 B
let fileType = file.type; // 文件类型
let duration = 0; // 时长 单位 S
let ext = ''; // 文件后缀
let element = document.createElement('video');
// 判断上传的视频是否超过 1.5G
if (fileSize > 1.5 * 1024 * 1024 * 1024 ) {
layer.msg("文件大小不得超过1.5G");
return false;
}
// 获取文件后缀
ext = fileName.split('.').pop();
// 获取本地文件路径
element.src = URL.createObjectURL(file);
//下面需要注意的是在监听loadedmetadata绑定的事件中对duration直接进行赋值是无效的,需要在fun回调函数中进行赋值
element.addEventListener('loadedmetadata', function () {
//音频/视频的元数据已加载时,会发生 loadedmetadata 事件
duration = element.duration //时长以秒作为单位
videoWidth = element.videoWidth; // 宽度
videoHeight = element.videoHeight; // 高度
});} </script>
下一篇: 图片压缩
Copyright © 2021
www.yunyakeji.cn All rights reserved. 小明博客 豫ICP备2020029140号-1