iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >element-ui配合node实现自定义上传文件方式
  • 103
分享到

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

2024-04-02 19:04:59 103人浏览 八月长安
摘要

目录element-ui配合node实现自定义上传文件自定义elementui上传文件及携带参数下面是一个简单的上传标签具体实现携带参数element-ui配合node实现自定义上传

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

某些情况下,使用element-ui的upload组件默认上传无法满足我们的需求,so~今天主要介绍如何使用element-ui实现自定义上传,以及后端如何接收上传的文件信息和其他信息,根据element-ui文档,Http-request可以自定义上传方法,会覆盖掉默认的上传。

首先我们来看前端代码:

<template>
  <div style="margin-top:100px">
    <el-fORM :model="form">
      <el-form-item label="姓名" label-width="50px">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="年龄" label-width="50px">
        <el-input v-model="form.age"></el-input>
      </el-form-item>
      <el-form-item label="文件" label-width="50px">
        <el-upload 
          class="upload-demo" 
          :auto-upload="false" 
          :limit="1" 
          ref="upload"
          :http-request="upload"
          multiple>
          <!-- :http-request="upload" -->
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">只能上传pdf文件</div>
        </el-upload>
      </el-form-item>
    </el-form>
    
    <el-button type="primary" @click="upload">确定</el-button>
  </div>
</template>
<script>
  export default{
    name: 'upload',
    data() {
      return {
        form: {
          name: '',
          age: ''
        }
      }
    },
    methods: {
      upload() {
        const formData = new FormData();
        const file = this.$refs.upload.uploadFiles[0];
        const headerConfig = { headers: { 'Content-Type': 'multipart/form-data' } };
        if (!file) { // 若未选择文件
          alert('请选择文件');
          return;
        }
        formData.append('file', file.raw);
        formData.append('name', this.name);
        formData.append('age', this.age);
        this.$http.post('/api/upload', formData, headerConfig).then(res => {
          console.log(res);
        })
      }
    }
  }
</script>

由于是上传文件,所以我们需要配置下axiOS请求header的Content-Type为'multipart/form-data',this.$refs.upload.uploadFiles[0].raw即为我们选择的文件,name和age则为其他要传的信息。

接着,我们来看后端如何获取,这里以node为例:

我们需要安装multer中间件,npm install multer -S即可,接下来我们来看如何使用multer。

首先引入multer:

var express = require('express');
var multer = require('multer')
const upload = multer({ dest: 'uploads/' });
 
var app = express();
app.use(upload.single('file')); //
 
app.post('/api/upload', (req, res)=>{
  console.log(req.body);//获取到的age和name
  console.log(req.file);//获取到的文件
    //做些其他事情
})

整个过程下来,就完成了图片的上传,非常简单。

关于multer的用法:https://www.npmjs.com/package/multer

自定义elementui上传文件及携带参数

elementui提供了上传文件的ui,可以比较方便,我们需要它来完成自定义上传文件以及携带参数需要改写其中的一些方法来实现。

下面是一个简单的上传标签

    <el-upload
        ref="upload"
        style="display: inline"
        drag
        action=""
        :before-upload="beforeUploadHandle"
        :http-request="handleUploadForm"
        :auto-upload="false"
        multiple
        :limit="1"
        :on-exceed="handleExceed">
      <el-link icon="el-icon-paperclip" type="primary">添加需要上传的文件</el-link>
    </el-upload>

不自动上传

:auto-upload=“false”

限制上传文件个数

:limit=“1”

上传之前的校验

我们需要实现这个方法,来检测上传的合法性

:before-upload=“beforeUploadHandle”

上传时需要携带参数

需要上传的数据文件以及参数在这里来处理添加

:http-request=“handleUploadForm”

检测添加文件是否超过限制

:on-exceed=“handleExceed”

手动上传

其中的upload对应于上面的ref=“upload”,我们只需要给按钮实现一个方法执行此语句便可以实现自己点击上传

this.$refs.upload.submit();

具体实现

上传限制以及上传之前的校验不赘述,这里给出一个简单的demo。上传限制实现类似,只是给出一些提示信息,file便是我们上传的文件。 

    beforeUploadHandle(file) {
      if (
          file.type !== "image/png" &&
          file.type !== "image/jpeg"
      ) {
        this.$message.error("只支持.jpg、.jpeg、.jpe、.png文件!");
        return false;
      }
    },

携带参数

handleUploadForm(param) {
      console.log(this.pid)
      let thisInfo = this
      let formData = new FormData()
      // 在formData中加入我们需要的参数
      formData.append('file', param.file)
    	formData.append('id', this.pid)
    // 向后端发送数据
      thisInfo.$axios.post('api/user/update_Info/', formData).then((res) => {
        if (res.status === 200) {
          thisInfo.$message.success('修改信息成功')
        } else {
          thisInfo.$message.success('修改信息失败')
        }
        thisInfo.formFileList = []
        thisInfo.uploadFormFileList = []
      })
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

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

本文链接: https://www.lsjlt.com/news/167004.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作