vue使用element 上传图片,修改图片

本文档介绍了在Vue项目中使用Element UI组件进行图片上传和编辑的详细步骤,包括上传图片预览、图片路径处理、图片列表展示及图片修改。重点在于图片路径的处理,以及如何在编辑模式下更新图片列表。

vue使用element 上传图片,修改图片



前言

开发后台管理项目时,遇到了上传图片的模块,这个比较简单,但是保存后的图片需要编辑就比较麻烦了,自己记录一下,也分享一下,多多指教


一、应用场景

1.上传图片并进行放大预览

在这里插入图片描述

2.图片上传代码

我这里的实现是直接将图片上传到接口,成功后返回图片路径,表单提交时,后台要路径拼成的字符串格式,类似str=‘/uploads/20220418/d93905dbcd041a0a88abc72fd34b6c98.jpg,/uploads/20220418/d93905dbcd041a0a88abc72fd34b6c98.jpg,/uploads/20220418/d93905dbcd041a0a88abc72fd34b6c98.jpg’;下面会介绍路径处理方法

		<el-upload
            :action="上传图片接口地址"
            list-type="picture-card"
            :on-preview="handlePictureCardPreview"
            :on-success="imgSuccess"
            :on-error="imgError"
            :on-remove="imgRemove"
          >
            <i class="el-icon-plus"></i>
          </el-upload>

在这里插入图片描述

 // 上传成功
    imgSuccess(res, file, fileList) {
      this.fileList = fileList;
      //这里我是用一个fileList数组存取,当保存的时候进行图片路径处理
    },
    // 上传失败
    imgError(res) {
      this.$message({
        type: "error",
        message: "附件上传失败",
      });
    },

    // 删除图片
    imgRemove(file, fileList) {
      this.fileList = fileList;
    },
    // 附件上传图片预览事件,这个就是将路径直接放进一个弹窗显示出来就可以了

    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    // 处理图片路径
    setImgUrl(imgArr) {
      let arr = [];
      if (imgArr.length>0) {
        for (let i = 0; i < imgArr.length; i++) {
        const element = imgArr[i];
        arr.push(element.response.data.url);
        //这个地方根据后台返回的数据进行取值,可以先打印一下
      }
      return arr.join();
      } else {
        return ''
      }
      
    },

二、修改已经上传的图片,并展示到图片列表中

1.效果展示(先展示原来的图片,再上传新图片,也可删除原来的图片)

在这里插入图片描述

2.编辑代码

  1. 编辑组件代码
		<el-upload
            :action="上传图片接口地址"
            list-type="picture-card"
            :on-preview="handlePictureCardPreview"
            :on-success="imgSuccess1"
            :on-error="imgError1"
            :on-remove="imgRemove1"
            :file-list="fileList2"
          >
            <i class="el-icon-plus"></i>
          </el-upload>
  1. 处理获取到的图片路径,并进行处理展示到列表
 // 表格编辑按钮
    tableBianji(row) {
    //这是表格编辑按钮,根据一行的id获取这一行的详情,我这边调取单行详情是根据id查的,查到详情看返回的图片信息,不同的返回不同处理,这只是一个思路
      this.changeTanchuang = true;
      this.changeId = row.id;
      let form = { id: row.id };
      let _this = this;
      //这是 我自己封装的方法,不用理会,只看图片路径处理即可
      this.request("url", "GET", form, function (res) {
        if (res.code == 1) {
          _this.changeTanchuangForm = res.data;
          //将字符串转成数组
          let arr = _this.changeTanchuangForm.up_file.split(",");
          for (let i = 0; i < arr.length; i++) {
          //创建对象,并将路径进行ip地址拼接
            let obj = {      
              url: _this.requestUrl + arr[i],
            };
            //放进图片列表
            _this.fileList2.push(obj);
          }
         
        } else {
          _this.$message({
            message: res.msg,
            type: "error",
          });
        }
      });
    },
  1. 编辑图片插件的方法
    fileList1 用来放插件变化的图片路径
// 删除图片
    imgRemove1(file, fileList) {
      this.fileList1 = fileList;
    },
    // 上传成功
    imgSuccess1(res, file, fileList) {
      this.fileList1 = fileList;
    },
    // 上传失败
    imgError1(res) {
      this.$message({
        type: "error",
        message: "附件上传失败",
      });
    },
  1. 获取最后列表存在的图片(上传两张新的图片后,进行打印的this.fileList1)
    在这里插入图片描述
// 先判断图片是否更改
          if (this.fileList1.length==0) {
          //如果为0,则表示没有对图片进行编辑,则不用更改任何东西
          } else {
          //图片进行了一些操作,包括删除、新增;
            let arr = [];
            // 判断是否是新上传的
            this.fileList1.map((item,index)=>{
              if (item.response) {
              //是新上传的,将路径放进数组
                arr.push(item.response.data.url)
              } else {
              //原来存在的,将路径进行截取后放进数组
                let str = '/uploads'+item.url.split('/uploads')[1];
                arr.push(str)
              }

            })
          //处理后的路径字符串
          let up_file = arr.join(',')
          }

总结

就是使用vue结合element进行图片上传和编辑的一个操作,主要就是对图片路径的处理,这里可能你的有些路径是和我的不一样的,这个是根据后台返回的格式决定的,可以多打印几次。OVER

你可以使用 Vue.js 和 Element UI 来实现将上传图片放在指定的文件夹中。下面是一个简单的示例代码: 首先,你需要在 Vue 组件中引入 Element UI 的 Upload 组件,并添加一个方法来处理上传的文件: ```html <template> <div> <el-upload action="/upload" <!-- 上传文件的接口地址 --> :on-success="handleUploadSuccess" > <el-button type="primary">点击上传</el-button> </el-upload> </div> </template> <script> export default { methods: { handleUploadSuccess(response, file, fileList) { // 处理上传成功后的逻辑 // response 包含服务器返回的数据 // file 是当前上传的文件对象 // fileList 是上传成功的文件列表 // 可以在这个方法中将文件移动到指定的文件夹中 // 例如,可以通过发送请求到后端来实现文件移动 } } } </script> ``` 然后,在后端服务器上,你需要接收上传文件的接口,并将文件移动到指定的文件夹中。这里以 Node.js 为例,使用 Express 框架来处理请求: ```javascript const express = require('express'); const multer = require('multer'); // 用于处理文件上传 const app = express(); // 创建一个存储引擎来指定文件存储的位置和名称 const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'path/to/your/folder'); // 指定文件夹的路径 }, filename: function (req, file, cb) { cb(null, file.originalname); // 保留原始文件名 } }); // 创建一个 multer 实例来处理上传 const upload = multer({ storage: storage }); // 处理文件上传的接口 app.post('/upload', upload.single('file'), (req, res) => { // 文件上传成功后的逻辑 // 可以在这里返回一些数据给前端 }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 在上述代码中,`path/to/your/folder` 是你想要将上传图片存放的文件夹的路径。你可以根据自己的需求进行修改。 请注意,上述代码仅提供了一个简单的示例,实际情况中可能需要进行更多的处理和验证。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值