当前位置:首页 > VUE

vue实现上传进度

2026-03-30 01:02:51VUE

Vue 实现上传进度的方法

使用 axios 的 onUploadProgress 属性

在 Vue 中可以通过 axios 的 onUploadProgress 属性实现上传进度显示。该属性接收一个回调函数,参数为进度事件对象,包含已上传字节和总字节信息。

// 示例代码
uploadFile(file) {
  const formData = new FormData();
  formData.append('file', file);

  axios.post('/upload', formData, {
    onUploadProgress: (progressEvent) => {
      const percentCompleted = Math.round(
        (progressEvent.loaded * 100) / progressEvent.total
      );
      this.uploadPercentage = percentCompleted;
    }
  });
}

使用原生 XMLHttpRequest 对象

如果不使用 axios,可以直接通过 XMLHttpRequest 的 upload 属性监听进度事件。

// 示例代码
uploadFile(file) {
  const xhr = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('file', file);

  xhr.upload.addEventListener('progress', (event) => {
    if (event.lengthComputable) {
      const percentComplete = (event.loaded / event.total) * 100;
      this.uploadPercentage = Math.round(percentComplete);
    }
  });

  xhr.open('POST', '/upload', true);
  xhr.send(formData);
}

在模板中显示进度条

在 Vue 模板中可以通过绑定进度值到进度条组件或自定义样式来显示上传进度。

<template>
  <div>
    <input type="file" @change="handleFileChange" />
    <progress :value="uploadPercentage" max="100"></progress>
    <span>{{ uploadPercentage }}%</span>
  </div>
</template>

使用第三方库

如果需要更复杂的功能,可以考虑使用专门的文件上传库如 vue-upload-componentdropzone,这些库内置了进度显示功能。

// 示例使用 vue-upload-component
import VueUploadComponent from 'vue-upload-component';

export default {
  components: {
    'file-upload': VueUploadComponent
  },
  methods: {
    onProgress(file) {
      this.uploadPercentage = file.progress;
    }
  }
}

错误处理和取消上传

实现上传进度时还应考虑错误处理和取消上传的功能。

vue实现上传进度

// 示例代码
uploadFile(file) {
  const cancelToken = axios.CancelToken;
  const source = cancelToken.source();

  axios.post('/upload', formData, {
    onUploadProgress: (progressEvent) => {
      // 进度处理
    },
    cancelToken: source.token
  }).catch(error => {
    if (axios.isCancel(error)) {
      console.log('Upload canceled');
    } else {
      console.error('Upload error:', error);
    }
  });

  // 取消上传
  this.cancelUpload = () => {
    source.cancel('Operation canceled by the user.');
  };
}

以上方法可以根据具体需求选择适合的方式实现上传进度功能。

标签: 进度上传
分享给朋友:

相关文章

vue实现视频上传管理

vue实现视频上传管理

视频上传管理实现方案 前端部分(Vue.js) 使用<input type="file">元素配合<video>标签实现基础上传和预览功能: <template>…

vue实现上传表格

vue实现上传表格

Vue实现上传表格的方法 使用Element UI上传组件 Element UI提供了el-upload组件,可以方便地实现文件上传功能。需要安装Element UI并引入相关组件。 安装Eleme…

php 实现上传视频

php 实现上传视频

上传视频的基本流程 在PHP中实现视频上传功能需要处理文件接收、验证、存储等步骤。核心是通过$_FILES超全局变量获取上传的文件信息,结合move_uploaded_file函数完成存储。 创建H…

vue实现图片重新上传

vue实现图片重新上传

实现图片重新上传功能 在Vue中实现图片重新上传功能,通常涉及文件选择、预览、上传和重置等步骤。以下是一个完整的实现方案: 模板部分 <template> <div>…

vue实现环形进度组件

vue实现环形进度组件

实现环形进度组件 环形进度组件可以通过SVG或Canvas实现,以下是基于SVG的实现方法: 定义组件模板 <template> <div class="circle-pro…

vue用户实现头像上传

vue用户实现头像上传

前端实现头像上传(Vue + Element UI) 环境准备 确保项目已安装element-ui和axios(或其他HTTP库): npm install element-ui axios 组件代…