Vue如何基于elementui将视频文件切片上传
时间: 2023-06-23 08:08:08 浏览: 178
要将视频文件切片上传,你需要使用一些 JavaScript 库,如 `video.js` 和 `mux.js`。`video.js` 可以帮助你在前端播放视频,而 `mux.js` 可以将视频文件切片并进行封装。另外,你还需要使用 `axios` 库来进行文件上传。
在使用 `element-ui` 的情况下,你可以使用其提供的上传组件 `el-upload`,并与上述 JavaScript 库结合使用。
以下是大致的实现步骤:
1. 引入相关 JavaScript 库与 `element-ui` 的上传组件:
```
<script src="https://cdn.bootcdn.net/ajax/libs/video.js/7.10.2/video.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/mux.js/5.7.0/mux.min.js"></script>
<el-upload
class="upload-demo"
action="your-upload-url"
:before-upload="beforeUpload"
:on-progress="onProgress"
:on-success="onSuccess"
:on-error="onError">
</el-upload>
```
2. 在 `beforeUpload` 回调函数中,使用 `mux.js` 将视频文件切片并进行封装:
```
beforeUpload(file) {
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = () => {
const initSegment = muxjs.mp4.generator.initSegment(new Uint8Array(reader.result));
const mediaSegment = muxjs.mp4.generator.mediaSegment(new Uint8Array(reader.result));
// 将切片后的视频封装成 Blob 对象
const blob = new Blob([initSegment, mediaSegment], { type: 'video/mp4' });
// 将 Blob 对象赋值给上传组件的 file 属性
this.uploadFile = new File([blob], file.name, { type: 'video/mp4' });
};
return false;
}
```
3. 在 `onSuccess` 回调函数中,使用 `axios` 将文件上传到后端:
```
onSuccess(response, file) {
const formData = new FormData();
formData.append('file', this.uploadFile);
axios.post('your-upload-url', formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
onUploadProgress: (progressEvent) => {
this.uploadPercent = Math.round((progressEvent.loaded * 100) / progressEvent.total);
}
}).then((res) => {
console.log(res.data);
}).catch((error) => {
console.log(error);
});
}
```
这样,你就可以基于 `element-ui` 将视频文件切片上传了。
阅读全文