<template>
<div>
<button @click="downloadFile">下载文件</button>
<el-progress v-if="showProgress" :percentage="progress" :status="progressStatus"></el-progress>
</div>
</template>
<script>
import axios from 'axios';
import { ElMessage } from 'element-plus';
export default {
data() {
return {
showProgress: false,
progress: 0,
progressStatus: 'success',
}
},
methods: {
downloadFile() {
this.showProgress = true;
axios({
url: 'url_to_your_file',
method: 'GET',
responseType: 'blob', // This is important
onDownloadProgress: (progressEvent) => {
// Calculate the percentage
this.progress = Math.round((progressEvent.loaded * 100) / progressEvent.total);
},
})
.then((response) => {
// Create a blob link
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file_name');
document.body.appendChild(link);
link.click();
// Notify the user
ElMessage.success('文件下载完成!');
this.showProgress = false;
})
.catch((error) => {