Vue+elementui如何实现上传图片且带字段提交【基于前端角度】

主要谈一下实现过程,首先给大家看下贴图:
在这里插入图片描述
我用了一个简化版本的来做的,具体的字段可以自己加进去,下面说一下我的实现过程吧
第一步:搭建页面(主要用elementUI自带组件)
搭建时我采用的是elementUI的el-upload标签,因为不是即时上传,所以action我设置为空,如下代码所示:

<el-upload
  action=""
  list-type="picture-card"
  ref="upload"
  :file-list="imgList"
  :on-preview="handlePictureCardPreview"
  :on-remove="handleRemove"
  :before-upload="beforeupload"
  :on-change="uploadFile"
  :auto-upload="false"
>
  <i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
  <img width="100%" :src="dialogImageUrl" alt="" />
</el-dialog>

第二步:页面联动(主要触发上传且取消上传)
这个比较好的是支持上传完之后可以自行删除的操作,如下所示的图标,当然点击时候要添加这个移除属性on-remove和执行方法。
在这里插入图片描述

依赖参数如下:
dialogImageUrl: “”,
fileStore: “”,
主要是存放图片的地址和临时存放文件流的
依赖方法如下:

1.文件清除函数
handleRemove(file, fileList) {
      debugger;
      this.fileStore = null;
      console.log(file, fileList);
  },
2.文件预览函数
handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.addKeyPersonForm.file = file.url;
      this.doUpload = true;
      this.fileStore = file;
      this.$refs["addKeyPersonForm"].validateField("file");
    },

3.上传前动作函数
// 阻止upload的自己上传,进行再操作
    beforeupload(file) {
      this.formData.append("file", file);
      this.fileStore = file;
      return false;
 },
4.文件变换函数
uploadFile(file, fileList) {
      console.log(file.raw);
      this.fileStore = file.raw;
 },

当然这些函数的目的主要还是只是为了前端的图片可视化及数据能够临时存放起来,我们是最后统一将数据进行提交的。
第三步:联调接口(主要是请求封装)
这个是个关键,主要采用的是post请求的方式,很多人不解的是headers里面的Content-Type怎么写,我们封装数据的时候记得用这种方式:

let formdata = new FormData();
formdata.append("file", this.fileStore);
formdata.append("orderId", this.editForm.orderId);

然后最后再通过axios进行数据的请求,如下所示请求接口函数:

const reqload = (method, url, params) => {
    return axios({
        method: method,
        url: url,
        headers: {
            'Content-Type': 'multipart/form-data',
            // 'Content-Type': 'application/x-www-form-urlencoded',
            token: localStorage.getItem('logintoken')
        },
        data: params,
        traditional: true,
        transformRequest: []
    }).then(res => res.data);
};

然后到了这里,基本所有的流程都已覆盖,期待我们的成长,网上好多都是抄来抄去的,看的我头都大,也希望能给您带来小小的帮助哈
至于后端的写法我就用两张核心业务图给大家展示哈,希望能给您带来一些灵感!
在这里插入图片描述
在这里插入图片描述
喜欢的话可以关注下博主哈,随时为您解忧!!!

【片尾彩蛋】

特备皇榜等您来上!

喜欢支持博主的可以上皇榜哟, 皇榜地址点击此处即可进入

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT黄大大

有您的支持我将毕尽一生精力为您

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

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

打赏作者

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

抵扣说明:

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

余额充值