element ui中实现upload文件、图片上传功能(el-upload)

文前推荐一下👉前端必备工具推荐网站(图床、API和ChatAI、智能AI简历、AI思维导图神器等实用工具):
站点入口:http://luckycola.com.cn/
图床:https://luckycola.com.cn/public/dist/#/imghub
多种API:https://luckycola.com.cn/public/dist/#/
ChatAI:https://luckycola.com.cn/public/dist/#/chatAi
AI思维导图神器:https://luckycola.com.cn/public/dist/#/aiQStore/aiMindPage

vue2结合Element实现文件上传

前言:一些信息化或后台项目开发中,避免不了上传文件的功能,这篇文章可以学会文件上传功能,这次我拿添加图片来实现此功能

  • 需要准备一个oss云储存地址和element ui中upload组件

1. 第一步,先选择一个upload组件

  • 这里我推荐大家选择手动上传的,这样不会因为选错文件而浪费oss资源(自动上传的小弊端)
    手动上传
  • 我们复制代码做一些自己的改造,需要用到Dialog对话框

2.第二步,对代码进行改造

  • 先放上template中代码
<template>
  <div>
   <!-- 这里是添加一个出发对话框的按钮 -->
    <el-row style="margin:20px 10px">
      <el-col align="right">
        <el-button type="primary" @click="addDialogVisible = true">添加轮播图</el-button>
      </el-col>
    </el-row>
     <!-- 添加轮播图 -->
    <el-dialog title="添加轮播图" :visible.sync="addDialogVisible" width="50%">
      <p style="margin:20px 0">上传图片:</p>
       <!-- 
          ref:代表此上传组件的标识
          action:用于放文件存储的地址
          accept:限制可以上传/选的文件类型后缀。这里我只需要图片,所以我设置了.jpg和.png
          file-list:文件列表
          on-change:文件列表改变后触发,用于判断一些文件大小等逻辑
          on-success:文件上传服务器成功后执行
          on-error:上传服务器失败后执行
          limit:每次上传的文件个数
        -->
      <el-upload
        class="upload-demo"
        ref="fileUpload"
        action="这里就是放oss云储存地址"
        accept=".jpg, .png"
        :on-change="handleChange"
        :on-success="handleSuc"
        :on-error="handleError"
        :file-list="fileList"
        :auto-upload="false"
        :limit="1"
      >
        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
          <!-- 点击触发上传服务器  -->
        <el-button
          style="margin-left: 10px;"
          size="small"
          type="success"
          @click="submitUpload"
        >上传到服务器</el-button>
          <!-- 给出文件提示 -->
        <div slot="tip" class="el-upload__tip el-icon-warning">只能上传jpg/png文件,且不能超过10mb、文件只能选取一个</div>
        <br />
        <div slot="tip" class="el-upload__tip el-icon-warning">选取文件后应上传服务器</div>
      </el-upload>
        <!-- 上传服务器后图片回显 -->
      <img :src="addBanner.bannerUrl" alt width="200" style="margin:20px auto;display: block;" />
      <div slot="footer" class="dialog-footer">
        <!-- 点击取消后执行一些列清空操作 -->
        <el-button @click="cancel()">取 消</el-button>
          <!-- 最后执行向API添加数据 -->
        <el-button type="primary" @click="submitAdd()">点击添加</el-button>
      </div>
    </el-dialog>
      </div>
</template>

  • 接下来是script中数据及方法部分

<script>
//获取添加的API,根据后端API自己写
import pggwBannerApi from "@/api/pggw/banner";
export default {
  data() {
    return {
      //控制添加图片对话框
      addDialogVisible: false,
      //需要向后端传递的对象
      addBanner: {
        bannerUrl: "",
      },
      //文件列表
      fileList: [],
    };
  },
  //这里采用监听来监听对话框的状态
   watch: {
    addDialogVisible: function () {
      if (this.addDialogVisible == false) {
      //如果为false,执行取消操作
        this.cancel();
      }
    },
  },
  //放方法的地方
  methods: {
    //文件状态改变时的钩子,判断文件大小
    handleChange(files, fileList) {
    //这些参数是组件自带的
    //控制上传文件的大小
      if (!(files.size / 1024 / 1024 < 10)) {
        this.$refs.fileUpload.clearFiles();
        this.fileLists = [];
        this.$notify.error({
          title: "文件大小错误",
          message: "上传文件大小不能超过 10MB!",
          duration: 2000,
        });
        return;
      }
    },
     //上传服务器,点击了上传服务器才会触发下面文件上传成功或失败的钩子
    submitUpload() {
    //这里是组件自带的submit()手动上传的方法,fileUpload是我们定义的ref
      this.$refs.fileUpload.submit();
    },
    //文件上传成功时的钩子
    handleSuc(response) {
    //文件上传成功后要把oss生成的文件路径给到图片的url
    //这样完成回显图片
      this.addBanner.bannerUrl = response.data.url;
      //上传成功处理
      return this.$notify.success({
        title: "成功",
        message: "文件上传成功",
        duration: 2000,
      });
    },
    // 上传失败
    handleError(err) {
      //上传失败处理
      return this.$notify.error({
        title: "上传失败",
        message: "文件上传失败",
        duration: 3000,
      });
    },

    //添加轮播图按钮
    submitAdd() {
      //开关类型布尔值
      var flag = true;
      //判断对象中的值是否为空,用来控制上传前传递参数对象有没有空值(必填项)
      for (var keys in this.addBanner) {
        if (!this.addBanner[keys].trim()) {
          flag = false;
          break;
        }
      }
      //关闭所有的消息提醒,解决无限消息弹框问题
      this.$notify.closeAll();
      this.$message.closeAll();
      if (flag) {
        this.$confirm("您确定添加此轮播图", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(() => {
       //这里我们就调用写好的api,向后端传递一个对象参数
            pggwBannerApi
              .addBanner(this.addBanner)
              .then((res) => {
                //添加成功的话,提示一个添加成功
                if (res.code == 20000) {
                  return this.$message({
                    type: "success",
                    message: "添加成功!",
                  });
                }
              })
              .catch((err) => {
                console.log(err);
                this.$message({
                  type: "error",
                  message: "添加失败",
                });
              });
          })
          .catch(() => {
            this.$message({
              type: "info",
              message: "已取消添加",
            });
          });
      } else {
        return this.$notify({
          title: "警告",
          message: "请填写完整之后提交",
          type: "warning",
          duration: 1500,
        });
      }
    },
    //点击取消,把对话框重置
    cancel() {
      this.addDialogVisible = false;
       //把对象参数里的值清空
      this.addBanner.bannerUrl = "";
      //再把文件列表清空
      this.$refs.fileUpload.clearFiles();
    },
  },
}
</script>

到这代码已经完毕,学到的伙伴点个赞吧

更多推荐:wantLG的《普歌-码上鸿鹄团队:vue中使用swiper动态遍历数据时出现不轮播的情况


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Element UIel-upload组件可以用于文件上传,并且支持文件预览功能。在使用el-upload组件时,你可以通过设置属性来启用文件预览功能。 首先,确保你已经正确引入了Element UI库和el-upload组件。然后,在你的代码使用el-upload组件,并设置以下属性: 1. 设置`action`属性为文件上传的接口地址。 2. 设置`show-file-list`属性为`false`,以隐藏默认的文件列表展示。 3. 设置`on-success`属性为一个回调函数,用于处理文件上传成功后的逻辑。 4. 设置`before-upload`属性为一个回调函数,用于在文件上传之前进行一些操作,比如文件预览。 5. 在`before-upload`回调函数,可以通过`file`参数获取到当前上传的文件对象。你可以使用`FileReader`对象来读取文件内容,并将其显示在页面上。 下面是一个示例代码: ```html <template> <el-upload class="upload-demo" action="/your-upload-api" :show-file-list="false" :before-upload="handleBeforeUpload" :on-success="handleSuccess" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> <script> export default { methods: { handleBeforeUpload(file) { // 使用FileReader读取文件内容并显示预览 const reader = new FileReader(); reader.onload = (e) => { // 在页面上显示文件预览 const preview = document.createElement('img'); preview.src = e.target.result; document.body.appendChild(preview); }; reader.readAsDataURL(file); // 返回false以阻止文件上传 return false; }, handleSuccess(response) { // 文件上传成功后的处理逻辑 console.log('文件上传成功', response); }, }, }; </script> ``` 这样,当用户选择文件后,会触发`before-upload`回调函数,你可以在该函数读取文件内容并显示预览。然后,文件会被阻止上传,直到你处理完预览逻辑后再手动触发文件上传。 希望以上信息对你有帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wantLG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值