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日

相关文章

  • 在vue中读取本地Json文件的方法

    当需要在Vue项目中读取本地的JSON文件时,可以使用 Vue.js 的 HTTP 客户端 Vue-resource 或者使用浏览器的原生 API fetch。 下面我将为您提供 Vue-resource 和 fetch 两种方法的使用详细攻略和示例。 一、使用Vue-resource获取本地JSON文件的方法 安装Vue-resource 首先需要在Vue…

    Vue 2023年5月28日
    00
  • Vue2 中的数据劫持简写示例

    Vue2 中的数据劫持是通过 Object.defineProperty() 来实现的,这个方法可以对对象的属性进行劫持,然后在对象属性赋值时自动触发相应的函数。下面我们通过示例来说明 Vue2 中的数据劫持简写的使用方法: 示例如下: 示例一: var obj = {} // 使用 $set 存储属性 Vue.set(obj, ‘name’, ‘Vue’)…

    Vue 2023年5月28日
    00
  • ElementUI日期选择器时间选择范围限制的实现

    下面是ElementUI日期选择器时间选择范围限制的实现的完整攻略。 基本使用 首先,我们需要在项目中引入ElementUI的日期选择器组件,并使用它进行基本日期选择。使用步骤如下: 1.1 引入ElementUI组件 在项目中使用npm安装ElementUI,然后在使用日期选择器的页面中引入: import { DatePicker } from ‘ele…

    Vue 2023年5月29日
    00
  • 动态Axios的配置步骤详解

    动态Axios是一个常用的网络请求库,其通过封装浏览器内置对象XMLHttpRequest实现的。在使用Axios时,我们需要对其进行配置,以满足特定的请求需求,本文将对Axios的配置进行详细讲解。 配置步骤 安装Axios 在使用Axios之前,需要先安装该库,可以通过以下命令进行安装: npm install axios 导入Axios 在进行Axio…

    Vue 2023年5月27日
    00
  • 快速上手uni-simple-router

    以下是“快速上手uni-simple-router”的完整攻略。 简介 uni-simple-router是一个基于vue-router封装的路由库,专注于uni-app移动端应用开发。相比vue-router,它的优势在于更为简单易用,且兼容性更好。 安装 在uni-app项目的根目录下,执行以下命令进行安装: npm install uni-simple…

    Vue 2023年5月27日
    00
  • vue动态渲染svg、添加点击事件的实现

    为了实现vue动态渲染svg以及添加点击事件,需要采用SVG语言作为矢量图形语言,使用vue指令中的v-html渲染SVG字符串,以及添加@click事件监听器。 实现步骤: 准备SVG字符串。可以是文件、变量定义或远程获取的内容。例如以下的SVG字符串: <svg width="100" height="100&quot…

    Vue 2023年5月28日
    00
  • vue路由$router.push()使用query传参的实际开发使用

    关于vue路由$router.push()使用query传参的实际开发使用,我将从以下几个方面进行详细讲解。 1. 路由传参 在vue开发中,路由传参是一个非常重要的概念。路由传参可以使我们的组件之间传递数据,可以实现多个组件之间的动态交互。 我们可以通过以下两种方式进行路由传参进行传参: params:通过路由路径匹配传递的参数,通常用于传递必须的参数,如…

    Vue 2023年5月27日
    00
  • vue中使用console.log打印的实现

    下面是详细讲解“vue中使用console.log打印的实现”的完整攻略: 1. 在Vue组件中使用 console.log 在Vue组件中使用 console.log 打印信息是一种常见的调试方式。我们可以在需要打印信息的代码处添加以下代码: console.log(‘要打印的信息’); 例如,在Vue组件中,我们可以使用 created 钩子来打印 Vu…

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