当前位置:首页 > VUE

vue实现文档上传

2026-03-26 19:14:08VUE

Vue 实现文档上传的方法

使用原生 HTML 表单和 Vue 结合

在 Vue 组件中创建一个表单,利用 HTML 的 input 元素设置 type="file" 来允许用户选择文件。通过 Vue 的 v-on 指令监听文件选择事件。

<template>
  <div>
    <input type="file" @change="handleFileUpload" />
    <button @click="uploadFile">上传文件</button>
  </div>
</template>

<script>
export default {
  methods: {
    handleFileUpload(event) {
      this.selectedFile = event.target.files[0];
    },
    uploadFile() {
      if (!this.selectedFile) return;
      const formData = new FormData();
      formData.append('file', this.selectedFile);
      // 使用 axios 或其他 HTTP 客户端发送请求
      axios.post('/api/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }).then(response => {
        console.log('上传成功', response.data);
      }).catch(error => {
        console.error('上传失败', error);
      });
    }
  },
  data() {
    return {
      selectedFile: null
    };
  }
};
</script>

使用第三方库(如 Vue-Dropzone)

如果需要更丰富的上传功能(如拖拽上传、预览等),可以使用第三方库如 vue-dropzone

安装依赖:

vue实现文档上传

npm install vue2-dropzone

在 Vue 组件中使用:

<template>
  <div>
    <vue-dropzone
      ref="myVueDropzone"
      id="dropzone"
      :options="dropzoneOptions"
      @vdropzone-success="uploadSuccess"
    ></vue-dropzone>
  </div>
</template>

<script>
import vue2Dropzone from 'vue2-dropzone';
import 'vue2-dropzone/dist/vue2Dropzone.min.css';

export default {
  components: {
    vueDropzone: vue2Dropzone
  },
  data() {
    return {
      dropzoneOptions: {
        url: '/api/upload',
        thumbnailWidth: 150,
        maxFilesize: 2, // MB
        headers: { 'Authorization': 'Bearer ' + localStorage.getItem('token') }
      }
    };
  },
  methods: {
    uploadSuccess(file, response) {
      console.log('文件上传成功', response);
    }
  }
};
</script>

文件上传前的验证

可以在上传前对文件大小、类型等进行验证:

vue实现文档上传

methods: {
  handleFileUpload(event) {
    const file = event.target.files[0];
    const allowedTypes = ['application/pdf', 'image/jpeg', 'image/png'];
    const maxSize = 2 * 1024 * 1024; // 2MB

    if (!allowedTypes.includes(file.type)) {
      alert('请上传 PDF、JPEG 或 PNG 文件');
      return;
    }
    if (file.size > maxSize) {
      alert('文件大小不能超过 2MB');
      return;
    }
    this.selectedFile = file;
  }
}

显示上传进度

如果需要显示上传进度,可以通过 axiosonUploadProgress 实现:

uploadFile() {
  const formData = new FormData();
  formData.append('file', this.selectedFile);
  axios.post('/api/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.data);
  });
}

多文件上传

支持多文件上传时,需将 inputmultiple 属性设置为 true,并调整数据处理逻辑:

<input type="file" multiple @change="handleFileUpload" />
handleFileUpload(event) {
  this.selectedFiles = Array.from(event.target.files);
},
uploadFiles() {
  const formData = new FormData();
  this.selectedFiles.forEach(file => {
    formData.append('files[]', file);
  });
  axios.post('/api/upload-multiple', formData);
}

标签: 上传文档
分享给朋友:

相关文章

elementui  文档

elementui 文档

以下是 Element UI 官方文档及相关资源的整理: 官方文档地址 Element UI 的官方文档可通过以下链接访问: 中文文档:https://element.eleme.cn/#/z…

vue实现视频上传

vue实现视频上传

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

vue实现音乐上传

vue实现音乐上传

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

vue实现文档在线预览

vue实现文档在线预览

vue实现文档在线预览的方法 使用第三方库实现 vue-doc-preview是一个专门用于文档预览的Vue组件,支持PDF、Word、Excel等多种格式。安装后可直接在组件中使用。 npm in…

vue实现图片重新上传

vue实现图片重新上传

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

vue实现上传预览功能

vue实现上传预览功能

Vue实现上传预览功能 基本文件上传组件 使用<input type="file">获取文件,通过FileReader读取文件内容: <template> <div…