和 multiple 属性 在 Vue 模板中添加一个文件输入框,设置 multiple 属性以允许选择多个文件。…">
当前位置:首页 > VUE

vue实现批量上传

2026-01-17 15:28:49VUE

Vue 实现批量上传的方法

使用 <input type="file">multiple 属性

在 Vue 模板中添加一个文件输入框,设置 multiple 属性以允许选择多个文件。通过 @change 事件监听文件选择。

<template>
  <input type="file" multiple @change="handleFileChange" />
</template>

在方法中处理文件选择事件,获取选中的文件列表并上传。

methods: {
  handleFileChange(event) {
    const files = event.target.files;
    if (files.length === 0) return;

    const formData = new FormData();
    for (let i = 0; i < files.length; i++) {
      formData.append('files[]', files[i]);
    }

    axios.post('/upload', formData, {
      headers: { 'Content-Type': 'multipart/form-data' }
    }).then(response => {
      console.log('上传成功', response);
    }).catch(error => {
      console.error('上传失败', error);
    });
  }
}

使用第三方库(如 vue-upload-component

安装 vue-upload-component 库,可以更方便地实现批量上传功能。

vue实现批量上传

npm install vue-upload-component

在 Vue 组件中引入并使用该库。

<template>
  <file-upload
    multiple
    :post-action="'/upload'"
    @input-file="handleFileChange"
  ></file-upload>
</template>

<script>
import FileUpload from 'vue-upload-component';

export default {
  components: { FileUpload },
  methods: {
    handleFileChange(newFiles, oldFiles) {
      console.log('新文件:', newFiles);
      console.log('旧文件:', oldFiles);
    }
  }
};
</script>

分片上传大文件

对于大文件,可以使用分片上传以提高上传效率和稳定性。以下是一个简单的分片上传实现。

vue实现批量上传

methods: {
  async uploadChunks(file) {
    const chunkSize = 1024 * 1024; // 1MB
    const totalChunks = Math.ceil(file.size / chunkSize);
    const uploadId = Date.now().toString();

    for (let i = 0; i < totalChunks; i++) {
      const start = i * chunkSize;
      const end = Math.min(start + chunkSize, file.size);
      const chunk = file.slice(start, end);

      const formData = new FormData();
      formData.append('chunk', chunk);
      formData.append('chunkNumber', i + 1);
      formData.append('totalChunks', totalChunks);
      formData.append('uploadId', uploadId);

      await axios.post('/upload-chunk', formData, {
        headers: { 'Content-Type': 'multipart/form-data' }
      });
    }

    await axios.post('/merge-chunks', { uploadId, fileName: file.name });
  }
}

显示上传进度

通过监听 axios 的上传进度事件,可以实时显示上传进度。

methods: {
  uploadWithProgress(files) {
    const formData = new FormData();
    for (let i = 0; i < files.length; i++) {
      formData.append('files[]', files[i]);
    }

    axios.post('/upload', formData, {
      headers: { 'Content-Type': 'multipart/form-data' },
      onUploadProgress: progressEvent => {
        const percentCompleted = Math.round(
          (progressEvent.loaded * 100) / progressEvent.total
        );
        console.log(`上传进度: ${percentCompleted}%`);
      }
    }).then(response => {
      console.log('上传成功', response);
    }).catch(error => {
      console.error('上传失败', error);
    });
  }
}

拖拽上传

通过监听拖拽事件,实现拖拽上传功能。

<template>
  <div
    @dragover.prevent="dragover"
    @dragleave.prevent="dragleave"
    @drop.prevent="drop"
    :class="{ 'drag-active': isDragActive }"
  >
    拖拽文件到此处上传
  </div>
</template>

<script>
export default {
  data() {
    return { isDragActive: false };
  },
  methods: {
    dragover() { this.isDragActive = true; },
    dragleave() { this.isDragActive = false; },
    drop(event) {
      this.isDragActive = false;
      const files = event.dataTransfer.files;
      if (files.length > 0) this.uploadFiles(files);
    }
  }
};
</script>

以上方法可以根据实际需求选择或组合使用,以实现高效的批量上传功能。

标签: 批量上传
分享给朋友:

相关文章

vue实现批量删除

vue实现批量删除

实现批量删除功能 在Vue中实现批量删除功能通常需要结合前端界面和后端API交互。以下是一个常见的实现方案: 数据准备与界面交互 创建数据列表和选中状态管理 data() { return {…

vue实现文件的上传

vue实现文件的上传

文件上传的基本实现 在Vue中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

h5怎么实现上传视频

h5怎么实现上传视频

使用HTML5实现视频上传 HTML5提供了<input type="file">元素用于文件上传,结合<video>标签可以实现视频上传和预览功能。 <input t…

vue 实现上传

vue 实现上传

Vue 实现文件上传的方法 在 Vue 中实现文件上传可以通过多种方式完成,以下是几种常见的方法: 使用原生 HTML 的 input 元素 通过 HTML 的 input 元素设置 type="…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

jquery 上传

jquery 上传

jQuery 文件上传方法 使用 jQuery 实现文件上传可以通过多种方式完成,以下是常见的几种方法: 使用原生表单和 AJAX 创建一个包含文件输入的表单,并通过 jQuery 的 AJAX…