最近在开发项目中,遇到需要获取视频时长的需求,合作的前端一直说获取不到,无奈作为后端只能自己动手。其实很简单,文件在选中之后,文件流中都已经包含了所有的信息,我们直接从文件流中直接获取即可。
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