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中的同步调用和异步调用方式

    下面详细讲解一下 Vue 中的同步调用和异步调用方式的完整攻略。 什么是同步调用和异步调用? 在讲解同步和异步之前,首先要介绍 JavaScript 中的同步和异步编程。JavaScript 是单线程的,同一时间只能处理一个任务。如果遇到了一个耗时的任务(比如网络请求、文件读取等),在这个任务完成之前,页面的渲染和其他交互都会被阻塞。 为了解决这个问题,Ja…

    Vue 2023年5月28日
    00
  • vue语法之render函数和jsx的基本使用

    Vue语法之render函数和JSX的基本使用 Vue中提供了一种灵活的渲染方式—— render 函数和 JSX 语法,它们可以帮助我们更精细化地控制组件的渲染过程,实现更加灵活的代码编写。 render函数 render 函数是 Vue 中的一个非常重要的函数,它用于渲染虚拟 DOM,我们可以通过定义 render 函数来自定义组件的渲染方式。 rend…

    Vue 2023年5月28日
    00
  • vue.js将unix时间戳转换为自定义时间格式

    Sure,下面我将详细讲解“vue.js将unix时间戳转换为自定义时间格式”的攻略。在开始讲解之前,我们需要先明白什么是Unix时间戳。 Unix时间戳是指从1970年1月1日00:00:00以来的秒数,常用于记录事件的时间。在Vue.js中,我们通常会遇到将Unix时间戳转换为自定义时间格式的需求。其中,自定义时间格式可以是任何需要的日期时间格式。 下面…

    Vue 2023年5月29日
    00
  • Vue混合文件使用以及ref的引用实例详解

    当我们在开发 Vue 项目时,有时我们需要在多个组件中使用相同的代码块,这时就可以使用 Vue 的混合文件功能来实现代码复用。同时,我们在 Vue 组件中也经常需要对 DOM 元素进行操作,这时可以使用 ref 引用对应的 DOM 元素。下面将详细讲解 Vue 混合文件的使用以及 ref 引用的实例详解。 Vue混合文件使用 Vue 混合文件可以理解为预定义…

    Vue 2023年5月27日
    00
  • Vue路由跳转与接收参数的实现方式

    Vue路由跳转与接收参数的实现方式可以通过以下步骤完成: 安装 vue-router 插件 vue-router 是 Vue.js 官方的路由管理插件,需要先安装并在项目中引入。 可以使用 npm 进行安装,命令如下: npm install vue-router –save 创建路由对象 在项目中创建一个 router.js 文件,并在该文件中创建一个路…

    Vue 2023年5月27日
    00
  • 浅析vue中的provide / inject 有什么用处

    提供/注入(Provide / Inject)是Vue.js中的一个高级特性,允许祖先组件通过一个透明的接口向后代组件注入依赖项。在这个过程中,依赖注入是通过一个专用的上下文对象进行的。这种上下文对象作为依赖被传递到了需要访问依赖的子组件中。本攻略将介绍Vue中provide/inject的用处、使用方法以及示例说明。 使用方法 在祖先组件中,使用provi…

    Vue 2023年5月29日
    00
  • Vue中的v-for列表循环示例详解

    针对“Vue中的v-for列表循环示例详解”,下面给出完整的攻略: 一、什么是v-for? v-for是Vue.js提供的一个用于循环渲染页面的指令,它可以循环遍历数据,生成对应的DOM元素,并将其渲染到页面上。 常见场景: 在数据较多的情况下,使用v-for可以更加方便的渲染数据; 使用v-for可以控制生成的DOM元素,可以动态增删改变以及数据操作等。 …

    Vue 2023年5月29日
    00
  • 使用FileReader API创建Vue文件阅读器组件

    使用FileReader API创建Vue文件阅读器组件的攻略包含以下步骤: 1. 创建Vue组件 我们首先需要创建一个Vue组件来显示和读取文件内容。下面是一个基本的Vue组件模板,用于显示文件内容: <template> <div> <textarea v-model="fileContent">&…

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