element-ui配合node实现自定义上传文件方式

下面是详细的攻略:

element-ui配合node实现自定义上传文件方式

一、前端部分

  1. 安装element-ui

首先,在项目中安装element-ui,具体命令为:

npm install element-ui --save
  1. 配置上传组件

接着,需要在前端页面中配置上传组件,例如:

<template>
  <el-upload
    class="upload-demo"
    drag
    :multiple="false"
    action="/upload"
    :on-success="handleSuccess"
    :before-upload="beforeUpload"
    :file-list="fileList">
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
</template>

<script>
export default {
  data() {
    return {
      fileList: []
    }
  },
  methods: {
    beforeUpload(file) {
      const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'
      const isLt2M = file.size / 1024 / 1024 < 0.5

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG/PNG 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 500KB!')
      }
      return isJPG && isLt2M
    },
    handleSuccess(response, file, fileList) {
      console.log('response', response)
      console.log('file', file)
      console.log('fileList', fileList)
      this.fileList = fileList
    }
  }
}
</script>

其中,需要注意的是,action属性指定了上传文件的后台接口地址,一般需要使用后端提供的接口地址。before-upload方法指定了上传文件之前的校验操作,此处仅仅实现了对文件类型和文件大小的校验。handleSuccess方法则是文件上传完成后的回调函数。

二、后端部分

  1. 创建node服务器

在后端,需要使用node搭建一个服务器,用来接收上传文件的请求。可以使用express框架,具体命令为:

npm install express multer --save

其中,multer是一个node中间件,用来处理上传的多个文件。

然后,创建一个app.js文件,在其中编写一下代码:

const express = require('express')
const multer = require('multer')

const app = express()
const upload = multer({ dest: 'uploads/' })

app.post('/upload', upload.single('file'), function (req, res) {
  const file = req.file
  console.log('file', file)
  if (!file) {
    const error = new Error('Please upload a file')
    error.httpStatusCode = 400
    return next(error)
  }
  res.send({ url: 'http://localhost:3000/' + file.filename })
})

app.listen(3000, () => {
  console.log('Server started!')
})

在上面的代码中,app.post监听来自前端页面的上传请求,其中必须指定中间件upload.single('file')。这里的file就是前端页面中指定的上传文件字段。在文件上传成功之后,会返回上传文件的地址。

  1. 设置node静态资源

默认情况下,node只能处理文本类型的请求,无法处理二进制文件,如果前端想直接通过链接访问上传的文件,就必须将文件上传的目录设置为静态资源目录。在app.js中加入以下代码即可:

app.use(express.static('uploads'))

三、完整示例

下面是一个完整的示例,可以将前端和后端的代码整合起来运行:

前端部分:

<template>
  <el-upload
    class="upload-demo"
    drag
    :multiple="false"
    action="/upload"
    :on-success="handleSuccess"
    :before-upload="beforeUpload"
    :file-list="fileList">
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
</template>

<script>
export default {
  data() {
    return {
      fileList: []
    }
  },
  methods: {
    beforeUpload(file) {
      const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'
      const isLt2M = file.size / 1024 / 1024 < 0.5

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG/PNG 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 500KB!')
      }
      return isJPG && isLt2M
    },
    handleSuccess(response, file, fileList) {
      console.log('response', response)
      console.log('file', file)
      console.log('fileList', fileList)
      this.fileList = fileList
    }
  }
}
</script>

<style>
.upload-demo {
  background-color: #f7faff;
  border: 1px dashed #bfcbd9;
  border-radius: 6px;
  margin-bottom: 15px;
  padding: 20px 0;
  text-align: center;
  color: #99a9bf;
  font-size: 14px;
}
</style>

后端部分:

const express = require('express')
const multer = require('multer')

const app = express()
const upload = multer({ dest: 'uploads/' })

app.post('/upload', upload.single('file'), function (req, res) {
  const file = req.file
  console.log('file', file)
  if (!file) {
    const error = new Error('Please upload a file')
    error.httpStatusCode = 400
    return next(error)
  }
  res.send({ url: 'http://localhost:3000/' + file.filename })
})

app.use(express.static('uploads'))

app.listen(3000, () => {
  console.log('Server started!')
})

运行测试

运行以下指令,将前端和后端的代码分别运行起来:

npm run serve
node app.js

然后,在浏览器中打开前端页面,点击上传按钮上传一张图片,控制台输出上传成功的信息,并且在uploads目录下会生成一个文件,之后就可以通过地址http://localhost:3000/文件名访问上传的图片文件了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:element-ui配合node实现自定义上传文件方式 - Python技术站

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

相关文章

  • JavaScript函数封装随机颜色验证码(完整代码)

    让我来详细讲解“JavaScript函数封装随机颜色验证码(完整代码)”的完整攻略。 题目描述 我们需要开发一个可以生成随机颜色的验证码的JavaScript函数,并将其封装成一个可复用的代码。 解决方案 我们可以通过以下步骤来实现该功能: 第一步:定义变量和函数 首先,我们需要定义一些变量和函数,如下所示: var code, codeLength = 6…

    Vue 2023年5月28日
    00
  • vue-hook-form使用详解

    标题:Vue Hook Form使用详解 简介 Vue Hook Form是一个基于React Hook Form开发的Vue表单库,它提供简单、灵活的API,帮助我们轻松处理表单数据和验证处理。本文将详细讲解如何使用Vue Hook Form库。 安装 在使用Vue Hook Form之前,我们首先需要安装它。可以通过npm来安装: npm install…

    Vue 2023年5月28日
    00
  • 浅谈在vue-cli3项目中解决动态引入图片img404的问题

    首先,出现图片404错误的原因可能有多种,但在vue-cli3项目中常见的错误是因为在引入图片时直接使用了相对路径而导致的。 解决这个问题的方法是使用require语法,在vue组件中通过require引入图片文件,再通过绑定v-bind:src动态绑定图片的路径,即可避免出现404错误。 具体的步骤如下: 下载并安装file-loader 在项目中使用re…

    Vue 2023年5月28日
    00
  • Vue简明介绍配置对象的配置选项

    关于Vue的配置对象的配置选项,我们可以分为以下几个部分进行讲解: 1. el 指定 Vue 实例绑定的元素。可以是一个 CSS 选择器字符串,也可以是一个 HTMLElement 实例。 示例1: <div id="app"> {{ message }} </div> var app = new Vue({ el…

    Vue 2023年5月28日
    00
  • vue更改数组中的值实例代码详解

    下面是“vue更改数组中的值实例代码详解”的完整攻略。 1. 问题背景 在Vue的开发过程中,我们经常需要更改数据,如更改一个数组中的值。然而,Vue的响应式系统在处理数组的变异方法(即push、pop、shift、unshift、splice、sort、reverse)时有一些限制,不会自动检测数组变异,需要手动触发视图更新。那么,如何正确地更改数组中的值…

    Vue 2023年5月28日
    00
  • 在vue中使用setInterval的方法示例

    在Vue中使用setInterval来执行周期性任务的方法如下: 在Vue组件的mounted钩子函数中,调用setInterval方法设置周期性任务的执行函数和时间间隔,同时将返回的计时器ID保存到组件的data对象中。 <template> <div>{{ count }}</div> </template&gt…

    Vue 2023年5月29日
    00
  • vue实例的选项总结

    下面我来详细讲解一下“vue实例的选项总结”的完整攻略。 一、Vue实例的选项总结 在Vue开发中,我们通常都是通过创建Vue实例的方式来进行页面渲染、响应式数据绑定以及和Vue生命周期相关的操作。而在创建Vue实例时,我们还可以通过选项来配置Vue实例,包括数据、方法、生命周期钩子等。下面就是Vue实例的所有选项及其用法。 data: 数据选项,用于定义V…

    Vue 2023年5月27日
    00
  • VUE2.0+Element-UI+Echarts封装的组件实例

    下面是详细的讲解“VUE2.0+Element-UI+Echarts封装的组件实例”的完整攻略。 简介 “VUE2.0+Element-UI+Echarts封装的组件实例”是一个基于Vue.js、Element-UI和Echarts的组件封装实例,可以帮助开发者快速地构建数据可视化的应用。在本攻略中,我们将详细讲解如何利用这些工具来构建一个简单的数据可视化应…

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