vue实现文件上传功能

下面我将详细介绍如何使用Vue实现文件上传功能,过程中将包含两个示例。

一、准备工作

1. 安装依赖

首先需要安装axiosqs这两个依赖。axios是一个基于promise的HTTP请求库,可以用于浏览器和Node.js,而qs是用于解析和格式化查询字符串的工具。

npm install axios qs

2. 配置请求头

当我们进行文件上传时,需要将请求头的Content-Type设置为multipart/form-data。这样服务器就知道这个请求包含了文件。我们可以使用axiosdefaults.headers来设置全局请求头。

import axios from 'axios';

axios.defaults.headers.post['Content-Type'] = 'multipart/form-data';

二、实现方式

1. 使用原生表单上传文件

<template>
  <div>
    <form ref="form" enctype="multipart/form-data">
      <input type="file" name="file" @change="onFileChange">
      <button type="button" @click="onSubmit">上传</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios';
import qs from 'qs';

export default {
  data() {
    return {
      file: null
    };
  },
  methods: {
    onFileChange(e) {
      this.file = e.target.files[0];
    },
    onSubmit() {
      const formData = new FormData();
      formData.append('file', this.file);

      axios.post('/upload', formData)
        .then(res => {
          console.log(res.data);
        })
        .catch(err => {
          console.error(err.response.data);
        });
    }
  }
};
</script>

以上代码中,我们首先创建了一个form表单,设置了其enctype属性为multipart/form-data,这样在选择文件上传时,就会把文件的二进制数据包含在请求体的表单数据中。我们监听了<input>标签的change事件,将选择的文件保存在组件的file变量中。当用户点击上传按钮时,使用FormData对象将文件打包成表单数据并发送请求。

2. 使用第三方库上传文件

除了上面提到的原生表单方式,还可以使用一些第三方库来更加方便地上传文件,如vue-upload-component

首先需要安装vue-upload-component

npm install vue-upload-component
<template>
  <div>
    <file-upload
      ref="upload"
      class="file-upload"
      :max-size="1024 * 1024 * 5"
      :extensions="['jpg', 'jpeg', 'png']"
      @input-file="onInputFile"
    >
      <button type="button">选择文件</button>
    </file-upload>
    <button type="button" @click="onSubmit">上传</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  methods: {
    onInputFile(file) {
      this.file = file;
    },
    onSubmit() {
      const formData = new FormData();
      formData.append('file', this.file);

      axios.post('/upload', formData)
        .then(res => {
          console.log(res.data);
        })
        .catch(err => {
          console.error(err.response.data);
        });
    }
  }
};
</script>

可以看到,使用vue-upload-component上传文件非常简便,只需要添加组件及相关配置即可。在选择文件时,input-file事件会被触发,我们在这里将选择的文件保存在组件的file变量中。之后点击上传按钮时,使用FormData对象将文件打包成表单数据并发送请求。

三、总结

总体来说,使用Vue实现文件上传功能并不是很难。我们可以使用原生表单、第三方库等方式来完成文件上传操作。但无论使用何种方式,都需要注意设置请求头、使用FormData对象打包文件以及捕获错误信息等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现文件上传功能 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue项目如何去掉URL中#符号的方法

    Vue.js是一个采用渐进式开发的JavaScript框架,路由系统使用的是Vue Router,该路由系统默认使用URL中的 “#”(hash) 字符来控制页面的跳转。但是,在某些场景下,我们想要去掉URL中的 # 符号。这里提供两种去掉 URL 中 # 符号的方法。 方法一:使用HTML5 History模式 HTML5 History模式会使用HTML…

    Vue 2023年5月27日
    00
  • element用脚本自动化构建新组件的实现示例

    这里是关于”element用脚本自动化构建新组件的实现示例”的完整攻略。 步骤一:准备工作 首先,您需要安装 Node.js 和 Vue-CLI,如果您已经安装了这些依赖则可以略过此步骤。 安装 Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。在开始构建新组件之前,必须安装 Node.js。 您可以前往…

    Vue 2023年5月28日
    00
  • SpringBoot校园综合管理系统实现流程分步讲解

    下面我将详细讲解“SpringBoot校园综合管理系统实现流程分步讲解”的完整攻略。 一、项目介绍 在这个部分,我们可以简要介绍一下该项目的背景和目的,以及使用的开发工具和框架等相关内容。 二、项目环境搭建 在这个部分,我们需要介绍如何搭建项目所需的环境,以及如何准备开发所需要的依赖库及配置文件等。 三、项目结构说明 在这个部分,我们需要详细介绍整个项目的结…

    Vue 2023年5月28日
    00
  • vue配置请求本地json数据的方法

    以下是详细讲解“Vue配置请求本地JSON数据的方法”的攻略。 1. 创建本地JSON文件 首先需要创建一个本地的JSON文件,可以将以下数据保存为data.json文件: { "name": "John", "age": 30, "gender": "male&quo…

    Vue 2023年5月28日
    00
  • Vue封装DateRangePicker组件流程详细介绍

    下面我将为你详细讲解Vue封装DateRangePicker组件的流程详细介绍,包含以下步骤: 1. 确定需求 在开始封装之前,需要确定需求。在本例中,我们需要封装一个DateRangePicker组件。这个组件需具有以下特点: 支持选择起始时间和结束时间 支持不同的时间格式 支持自定义样式 支持禁用日期 2. 确定依赖 在确定了需求之后,需要确定依赖。在本…

    Vue 2023年5月29日
    00
  • Vue中的v-cloak使用解读

    当使用Vue.js进行开发时,可能会出现一种情况:在 Vue.js 的编译过程中,由于使用了某些具有 v- 前缀的指令,例如v-if、v-for等,在渲染 HTML 界面的时候,页面会显示出这些指令,而此时还没有完成Vue实例的挂载。 为了解决这个问题,Vue.js提供了一种指令:v-cloak。该指令在 Vue.js 实例挂载之前会一直存在于对应的 HTM…

    Vue 2023年5月28日
    00
  • vue3如何实现挂载并使用axios

    当我们使用Vue3框架开发应用程序时,我们需要使用Axios实现数据通信。在Vue3中,Axios是一个可以在后台执行请求的JavaScript库。在本篇攻略中,我们将会介绍如何在Vue3中挂载及使用Axios。以下分为以下五个步骤: 安装Axios 在Vue3中使用Axios需要安装Axios。你可以通过npm或者yarn进行安装Axios: npm in…

    Vue 2023年5月28日
    00
  • 从0搭建Vue3组件库如何使用 glup 打包组件库并实现按需加载

    下面是从0搭建Vue3组件库并使用glup打包组件库实现按需加载的完整攻略。 步骤一:搭建组件库的开发环境 1.1 环境依赖 首先,我们需要安装Node.js和npm。在安装完成之后,可以在命令行中输入以下命令进行确认: node -v # 查看当前Node.js版本 npm -v # 查看当前npm版本 1.2 创建Vue3组件库 Vue3框架已经正式发布…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部