Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 768|回复: 0

[默认分类] 【vue开发问题-解决方法】(九)使用element upload自定义接口上传文件,input多文件上传

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-7-30 12:54:22 | 显示全部楼层 |阅读模式
    昨天做了一个上传用户头像的功能,已经附件管理功能。头像上传使用了elemenUI的上传控件el-upload,附件管理因为对样式没有要求使用了原生的附件上传。
    项目背景:使用axios的post调用接口
    头像上传
    使用el-upload标签,设置show-file-list为false不显示文件列表,注意一定要设置action(虽然这里用不到),http-request覆盖默认的上传行为,可以自定义上传的实现uploadSectionFile,这样在点击选择file文件后就直接执行uploadSectionFile中的操作。

    1. <el-upload class="avatar-uploader" :http-request="uploadSectionFile" :show-file-list="false" action="https://jsonplaceholder.typicode.com/posts/">
    2.   <img v-if="imgUrl" :src="imgUrl" class="avatar">
    3.    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    4. </el-upload>
    复制代码



    1.       function uploadSectionFile(param) {
    2.                 //创建临时的路径来展示图片
    3.                 var windowURL = window.URL || window.webkitURL;
    4.                 this.imgUrl = windowURL.createObjectURL(param.file);
    5.                 let name = param.file.name;
    6.                 let data = {
    7.                     file: file,
    8.                     fileType: name.split(".")[name.split(".").length - 1],
    9.                     fileId: this.$store.getters.uid,
    10.                     fileName: name,
    11.                 }
    12.                 let rs = ah.fileUpLoad(this, data);//封装的axio post请求
    13.                 console.log(rs);
    14.             },
    复制代码


    最后注意axios post文件上传方法的调用,data参数需要转化为formData()传递。

      
      
               let param = new FormData(); //创建form对象
       
      
                   param.append("file", data.file);//通过append向form对象添加数据
       
      
                   param.append("fileType", data.fileType);//通过append向form对象添加数据
       
      
                   param.append("fileId", data.fileId);//通过append向form对象添加数据
       
      
                   param.append("fileName", data.fileName);//添加form表单中其他数据
       
      
                   param.append("TOKEN", store.getters.accessToken);//添加登录验证
       
       
      
    1.       axios.post(_url, params, config) .then(res => { resolve(res.data); }) .catch(err => { reject(err); }) [/i]
    复制代码


      
    请求头部:

    请求参数格式:

    使用input标签实现多文件上传
    实现点击按钮选择文件上传,实现思路:隐藏input标签(不显示文件),btn的click事件触发input标签的onchange事件,然后再change事件中获取文件信息上传。

    1. <!-- 多文件上传 -->
    2.         <input type="file" @change="uploads($event)" id="files" style="display: none;" multiple/>
    3. <!--上传按钮,在elementUI表格中的button,scope.row为行数据-->
    4. <el-button size="mini" @click="uploadFile(scope.row)">上传</el-button>
    复制代码


    方法:

    1. //上传文件
    2.             function uploadFile(row) {
    3.                 this.row = row;
    4.                 $("#files").val("");//触发input file的点击事件
    5.                 $("#files").click();//触发input file的点击事件
    6.             },
    7.             function uploads(e) {
    8.                 for (let file of e.target.files) {//多文件上传
    9.                     let data = {
    10.                         file: file,
    11.                         bimId: this.finfo.bimid,
    12.                         actId: this.finfo.actid,
    13.                         bicpId: this.row.ITEMID,
    14.                     };
    15.                     let rs = ah.uploadAffix(this, data);
    16.                     if (!rs) break;
    17.                 }
    18.             },
    复制代码


    axios post请求参数还是要转化为formData()

    1.             let param = new FormData();
    2.             param.append("file[]", data.file); // "file[]" 代表数组 其中`file`是可变的
    3.             param.append("bimId", data.bimId);
    4.             param.append("actId", data.actId);
    5.             param.append("bicpId", data.bicpId); param.append("TOKEN", store.getters.accessToken);//必须
    6.       axios.post(_url, params, config)
    7.                 .then(res => {
    8.                     resolve(res.data);
    9.                 })
    10.                 .catch(err => {
    11.                     reject(err);
    12.                 })        
    复制代码


    以上代码不是全部,只是提供关键性代码,主要讲解思路实现方法。欢迎提问。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-27 20:28 , Processed in 0.387899 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表