您现在的位置是: 首页 >  技术分享 > 

JavaScript上传文件,获取大小、时长、类型、后缀、封面图等
传说中的小明 2024-06-03 09:36:31

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