vue实现文件上传功能

yizhihongxing

下面我将详细介绍如何使用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封装一个简单的div框选时间的组件的方法

    下面是详细讲解“vue封装一个简单的div框选时间的组件的方法”的完整攻略和示范代码。 1. 设计组件的props和data 首先,我们需要考虑这个div框选时间的组件需要哪些props和data。 开始时间和结束时间的默认值 可选的开始时间和结束时间范围,一般情况下为当前时间到未来若干天 组件的宽度和高度 根据上述内容,我们可以设计出如下的props和da…

    Vue 2023年5月29日
    00
  • Vue动态扩展表头的表格及数据方式(数组嵌套对象)

    下面我会详细讲解“Vue动态扩展表头的表格及数据方式(数组嵌套对象)”的完整攻略。 介绍 在Vue框架中,我们经常需要用到表格组件。而有些情况下,我们需要动态扩展表格的表头,并且表格数据是数组嵌套对象的形式。这时,我们需要采用一定的技巧来实现这一功能。 实现步骤 安装依赖 首先,我们需要安装element-ui组件库,以及vue-router和axios等常…

    Vue 2023年5月28日
    00
  • vue配置多页面的实现方法

    关于Vue配置多页面的实现方法,下面是一个完整的攻略。 1. 安装依赖 在开始前,需要安装vue-loader和vue-template-compiler这两个依赖。 npm install vue-loader vue-template-compiler –save-dev 2. 配置webpack 在webpack配置文件中,需要做如下修改。 在ent…

    Vue 2023年5月27日
    00
  • 基于vue-cli3创建libs库的实现方法

    首先,创建一个基于vue-cli3的JavaScript库,需要按照以下步骤进行: 步骤一: 创建项目 使用vue-cli3脚手架创建一个新项目,并选取默认配置(Default、Manually select features、Config files)。 vue create libs-project 步骤二: 配置项目 通过以下命令,在项目根目录下创建v…

    Vue 2023年5月29日
    00
  • Vue3源码分析组件挂载创建虚拟节点

    下面是关于Vue3源码分析组件挂载创建虚拟节点的完整攻略。 什么是组件挂载 组件挂载是指在Vue生命周期的beforeMount阶段,组件实例被创建后,将组件的模板解析成虚拟DOM并挂载到指定的DOM元素上的过程。在Vue实现组件挂载的过程中,重要的一步是通过编译器将组件模板解析成渲染函数,进而通过渲染函数创建虚拟节点。 Vue3组件挂载的实现过程 在Vue…

    Vue 2023年5月27日
    00
  • vue实现PC端录音功能的实例代码

    Vue实现PC端录音功能的实例代码需要通过JS录音库来实现,常用的开源录音库有Recorder.js和RecordRTC,这两个库都可以用于Vue项目的录音。 下面是实现步骤及示例代码: 步骤一:安装录音库 使用npm安装Recorder.js或RecordRTC npm install recorderjs npm install recordrtc 步骤…

    Vue 2023年5月28日
    00
  • vue实现动态数据绑定

    Vue.js 是一个 MVVM 框架,其中最核心的特性就是数据绑定,这是 Vue.js 区别与其他 JavaScript 框架的最重要的特点之一,本文将介绍 Vue.js 实现动态数据绑定的完整攻略。 1. 基本概念介绍 Vue.js 中有三个最核心的概念:数据、模板和渲染器。其中,数据就是我们的数据模型,用来存储应用程序中的数据;模板则用于描述数据如何被展…

    Vue 2023年5月28日
    00
  • Vue组件和Route的生命周期实例详解

    Vue组件和Route的生命周期是Vue.js框架中非常重要的概念。在Vue.js开发中,生命周期指 Vue实例从创建到销毁的整个过程, Vue实例在这个过程中会自动执行一些方法,这些方法被称为生命周期钩子函数,这些函数可以帮助我们在不同的阶段进行操作。 在Vue Router中,我们经常需要用到Route的生命周期。Route的生命周期指的是当一个路由被匹…

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