和 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中实现语音上传功能需要结合浏览器的Web Audio API和文件上传逻辑。以下是一个完整的实现方案: 录音功能实现 安装依赖库recorder-core和wav编码器:…

vue实现视频上传

vue实现视频上传

Vue 实现视频上传的方法 使用原生 input 元素和 FormData 在 Vue 中可以通过原生 input 元素结合 FormData 实现视频上传功能。创建一个文件选择输入框,监听文件变化事…

VUE如何实现批量翻译

VUE如何实现批量翻译

批量翻译的实现方法 在Vue中实现批量翻译可以通过集成第三方翻译API(如Google Translate API、百度翻译API等)或使用本地化工具(如i18n)来完成。以下是几种常见的方法: 使…

vue实现表格批量删除

vue实现表格批量删除

Vue实现表格批量删除功能 核心思路:通过复选框选择多条数据,调用接口批量删除,并更新本地数据。 数据准备与表格渲染 在Vue组件中定义表格数据和选中项的数组: data() { return…

vue实现excel上传预览

vue实现excel上传预览

vue实现excel上传预览的方法 使用xlsx库解析Excel文件 安装xlsx库来处理Excel文件: npm install xlsx 在Vue组件中引入xlsx库: import * as…

react如何批量选中

react如何批量选中

批量选中实现方法 在React中实现批量选中功能通常涉及状态管理、事件处理和UI交互。以下是几种常见实现方式: 使用状态管理跟踪选中项 通过维护一个数组或对象来存储选中项的状态: const [s…