当前位置:首页 > 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中实现头像上传功能通常需要结合文件上传组件和后端接口处理。以下是具体实现步骤: 前端组件实现 创建文件上传组件模板部分: <template> <d…

vue实现头像上传

vue实现头像上传

Vue 头像上传实现方法 使用 <input type="file"> 基础方法 创建文件输入控件并监听 change 事件: <template> <div>…

vue实现上传视频

vue实现上传视频

使用 <input type="file"> 实现基础上传 通过 HTML 原生文件选择控件获取视频文件,结合 Vue 处理上传逻辑。 <template> <…

vue实现音乐上传

vue实现音乐上传

Vue 实现音乐上传功能 音乐上传功能通常涉及前端界面交互、文件选择、上传进度显示以及后端接口对接。以下是基于 Vue 的实现方法: 前端界面设计 使用 Vue 的模板语法创建一个简单的上传界面,包…

vue实现进度圈效果

vue实现进度圈效果

使用 SVG 和 CSS 动画实现进度圈 在 Vue 中实现进度圈效果可以通过 SVG 结合 CSS 动画或 JavaScript 动态计算完成。以下是两种常见方法: 方法一:基于 SVG 的环形进…

vue实现上传功能

vue实现上传功能

实现文件上传功能 在Vue中实现文件上传功能可以通过结合HTML的<input type="file">元素和JavaScript的FormData对象来完成。以下是一个基本的实现方法:…