这几天遇到一个需求,上传mp4文件的时候需要获取一下视频的时长,超过一定限制前端做出限制,
结合网上的方案,写了一个获取上传的音视频文件时长的方法,具体代码如下

import React, { useState } from "react";
import { Upload, Button } from 'antd';
const Uploads = () => {
const [file, setFile] = useState<any>({})
//上传之前
const beforeUpload = (file: any) => {
console.log(file);
setFile(file)
return true;
};
const onFinish = () => {
const url = window.URL.createObjectURL(file);
//经测试,发现audio也可获取视频的时长
const audioElement = new Audio(url);
let duration;
audioElement.addEventListener("loadedmetadata", function (_event) {
duration = audioElement.duration;
console.log(duration);
});
}
return (
<div>
<Upload
name="file"
listType="picture-card"
className="avatar-uploader"
showUploadList={false}
disabled={false}
action="/api/img/upload"
beforeUpload={beforeUpload}
>
<span className="upload-text">上传</span>
</Upload>
<Button
type="primary"
onClick={onFinish}
>
同意协议并注册
</Button>
</div>
)
}
export default Uploads
其核心是在这块获取时长,当然,这块原生代码在vue中也可实现。

当指定的音频/视频的元数据已加载时,会发生 loadedmetadata 事件,
音频/视频的元数据包括:时长、尺寸(仅视频)以及文本轨道。