Vue2 示例
vue
<template>
<div>
<input type="file" @change="handleFileChange" />
<button @click="handlePause">暂停上传</button>
<button @click="handleResume">继续上传</button>
<div>上传进度:{{ progress.toFixed(2) }}%</div>
<div>上传速度:{{ speed }}</div>
</div>
</template>
<script>
import Vue from "vue";
import {createUploader} from "enlarge-file-upload";
import axios from "axios";
export default Vue.extend({
data() {
return {
progress: 0, // 进度
speed: "0 MB/s", // 速度
uploader: null, // 上传器实例
};
},
methods: {
// 定义上传函数
async uploadFunction({ chunk, index, hash, cancelToken }) {
const formData = new FormData();
formData.append("chunk", chunk);
formData.append("hash", hash);
formData.append("index", index.toString());
await axios.post("http://xxxx/api/upload", formData, {
cancelToken,
});
},
// 文件选择处理
handleFileChange(event) {
const file = event.target.files?.[0];
if (file && this.uploader) {
this.uploader.upload(file);
}
},
// 暂停上传
handlePause() {
if (this.uploader) {
this.uploader.pause();
}
},
// 继续上传
handleResume() {
if (this.uploader) {
this.uploader.resume();
}
},
},
created() {
const uploaderConfig = {
chunkSize: 5 * 1024 * 1024, // 5MB
concurrency: 5,
maxRetries: 3,
uploadFunction: this.uploadFunction,
onProgress: (progressValue) => {
this.progress = progressValue;
},
onSuccess: () => {
console.log("上传完毕");
},
onSpeed: (speedValue) => {
this.speed = speedValue;
},
};
// 创建上传器实例
this.uploader = createUploader(uploaderConfig);
},
});
</script>
<style scoped></style>