用vue写一个上传视频的组件
时间: 2024-05-07 21:15:47 浏览: 5
以下是一个简单的上传视频组件示例,使用Vue.js和Axios库。
```html
<template>
<div>
<input type="file" @change="uploadVideo">
<button @click="cancelUpload" v-if="uploading">取消上传</button>
<div v-if="uploading">
<p>正在上传:{{ progress }}%</p>
<progress :value="progress" max="100"></progress>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
uploading: false,
progress: 0
}
},
methods: {
uploadVideo(event) {
this.uploading = true;
const file = event.target.files[0];
const formData = new FormData();
formData.append('video', file);
axios.post('/api/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
onUploadProgress: (progressEvent) => {
this.progress = Math.round((progressEvent.loaded * 100) / progressEvent.total);
}
}).then(() => {
this.uploading = false;
this.progress = 0;
alert('上传成功!');
}).catch(() => {
this.uploading = false;
this.progress = 0;
alert('上传失败!');
});
},
cancelUpload() {
this.uploading = false;
this.progress = 0;
}
}
}
</script>
```
这个组件包含一个文件选择器和一个“取消上传”按钮。当用户选择视频文件时,会触发`uploadVideo`方法,该方法将文件作为FormData对象发送到服务器。在上传过程中,会显示一个进度条,指示上传进度。如果上传成功,将显示一个警告框,否则将显示上传失败的警告框。用户可以点击“取消上传”按钮停止上传过程。