【学习记录21】Vue+ElementUI el-upload多文件上传,一次请求上传多个文件!

这篇具有很好参考价值的文章主要介绍了【学习记录21】Vue+ElementUI el-upload多文件上传,一次请求上传多个文件!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前情回顾说点废话。。。

1、项目当中遇到需要上传多个图片,一次选取多个图片。但是吧el-upload默认只能一个一个传,每次上传成功还的自己去push,一个一个去判断。

2、关键是后台给的接口,要一次性接收一堆,无奈之下只能去网上搜索,大佬们都是给的代码片段无法直接使用。

3、经过各种搬运后实现了效果,闲下来就想着自己写一下我最后在代码中实现方法吧。大家共同学习进步,我也巩固一下知识点!有问题的地方欢迎各位大佬指正!

话不多说直接撸代码!!!

html部分

//  :auto-upload="false"    这一句必须加上,阻止默认上传事件     
//  :http-request="BSuploadFile"   上传到服务器的方法
//  :before-upload="beforeUpload" 上传到服务器前校验文件,选择文件的时候不校验,点击“上传到服务器”调用upload()方法的时候执行
//  :on-preview="handlePictureCardPreview"  预览图片
//  :on-remove="BShandleRemove"  删除图片
//  :on-change="changeFileLength"  选择文件后执行
//  multiple
//  :file-list="BSfileList"
<el-upload
              list-type="picture-card"
              class="upload-demo"
              action=""
              ref="upload"
              :auto-upload="false"
              :http-request="BSuploadFile"
              :before-upload="beforeUpload"
              :on-preview="handlePictureCardPreview"
              :on-remove="BShandleRemove"
              :on-change="changeFileLength"
              multiple
              :file-list="BSfileList">
              <i class="el-icon-plus"></i>
              <div slot="tip" class="el-upload__tip">
                只能上传jpg/png文件,且不超过1Mb
                <el-button @click="upload" type="success">上传到服务器</el-button>
              </div>
</el-upload>

 喏,没选择文件的时候就是下面的样子

 elementui upload上传多个文件,前端,vue,vue.js,elementui,前端,el-upload

 选完文件以后是下面的样子

elementui upload上传多个文件,前端,vue,vue.js,elementui,前端,el-upload

js部分

// 上传到服务器前的校验
beforeUpload(file) {
        console.log('上传前:',file)
// 打印出来看一下格式,file流有时候在file.raw中
        if (file&&file.type) {
          const isJPG = (file.type === 'image/jpeg' || file.type === 'image/png' || file.raw.type === 'image/jpeg' || file.raw.type === 'image/png');
          const isLt1M = file.size / 1024 / 1024 < 1;

          if (!isJPG) {
            this.$message.error('上传头像图片只能是 JPG、PNG 格式!');
          }
          if (!isLt1M) {
            this.$message.error('上传头像图片大小不能超过 1MB!');
          }
          return isJPG && isLt1M;
        } else {
          this.$message.error('文件格式错误,请检查!');
          return false
        }

},
// 选择文件,修改当前文件列表长度后
changeFileLength(singleFile, fileList){
        console.log('修改当前文件', singleFile, fileList)
        this.filesLength = fileList.length
        this.BSfileList = fileList
},
// 用户点击上传调用
async upload(){
        console.log('点击上传')
        // 触发上传 调用配置 :http-request="BSuploadFile"
        // 即触发 uploadFile函数
        await this.$refs.upload.submit();
        // 上传完成后执行的操作 ...
},
// 自定义上传文件,也就是上传到服务器的方法
BSuploadFile(param) {
        console.log('开始上传')
       

        // 当BSfileList长度等于用户需要上传的文件数时进行上传
        if (this.BSfileList.length == this.filesLength){
          // 创建FormData上传
          let fd = new FormData()
          // 将全部文件添加至FormData中
          this.BSfileList.forEach(file => {
            // 第一个参数可改,看后台接口接收什么就改成什么。
            // 第二个参数,是没一个文件的文件流,有时候是file,有时候是file.raw
            // 打印出来,根据时间情况来传入。我也不知道为什么,可能是elm版本封装的json格式不一样
            fd.append('file', file.raw)  
          })
          // 配置请求头,基本上所有上传文件用的都是form-data类型
          const config = {
            headers: {
              "Content-Type": "multipart/form-data",
            }
          }
          // 上传文件,看自己怎么用,没封装过ajx就用全局axios
          // this.axost.post("/abc/upload", fd, config).then(res => {
          multipleTbrandCultureFile(fd, config).then(res => {
            /*上传成功处理*/
            console.log(res)
            this.form.abcFiles = res.data
          }).catch(err => {/*报错处理*/});
        }
}

改进

实践出真理,在使用中发现的问题,上面的写法,校验只会出现弹窗,功能不对,优化后的代码如下。文章来源地址https://www.toymoban.com/news/detail-517893.html



// 自定义上传文件,也就是上传到服务器的方法
BSuploadFile(param) {
    console.log('开始上传')

    // 在此处加上校验
    // 删除html中的:before-upload="beforeUpload"
    const isgo = this.beforeUpload(file.file)
    if (isgo) {

        // 当BSfileList长度等于用户需要上传的文件数时进行上传
        if (this.BSfileList.length == this.filesLength){
          // 创建FormData上传
          let fd = new FormData()
          // 将全部文件添加至FormData中
          this.BSfileList.forEach(file => {
            // 第一个参数可改,看后台接口接收什么就改成什么。
            // 第二个参数,是没一个文件的文件流,有时候是file,有时候是file.raw
            // 打印出来,根据时间情况来传入。我也不知道为什么,可能是elm版本封装的json格式不一样
            fd.append('file', file.raw)  
          })
          // 配置请求头,基本上所有上传文件用的都是form-data类型
          const config = {
            headers: {
              "Content-Type": "multipart/form-data",
            }
          }
          // 上传文件,看自己怎么用,没封装过ajx就用全局axios
          // this.axost.post("/abc/upload", fd, config).then(res => {
          multipleTbrandCultureFile(fd, config).then(res => {
            /*上传成功处理*/
            console.log(res)
            this.form.abcFiles = res.data
          }).catch(err => {/*报错处理*/});
        }

    }
}


到了这里,关于【学习记录21】Vue+ElementUI el-upload多文件上传,一次请求上传多个文件!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示

    官方文档 https://element.eleme.cn/#/zh-CN/component/upload 具体参数说明,如何实现上传、下载、删除等功能 action :文件上传地址,我的项目里已经封装好了请求。使用的时候需要依据项目填写。 show-file-list : 是否显示已上传文件列表。 headers :设置上传的请求头部。我的项目需要传

    2024年01月20日
    浏览(36)
  • vue 使用 el-upload 上传文件(自动上传/手动上传)

    vue 使用 el-upload 上传文件(自动上传/手动上传) 上传 上传

    2024年02月13日
    浏览(33)
  • vue+el-upload(封装华为云OBS上传文件)前端直传

    注释:代码中###是需要填写自己东西的 以上代码为封装的组件代码,需要引入父组件后调用配置 下面图为组件调用,注册跟引入就不用我多说了吧,不会的自行百度 注:华为云前端直接上传的话会出现跨域报错,把华为云OBS CORS跨域规则设置一下 我设置的规则全部打开了

    2024年02月05日
    浏览(36)
  • elementUI 的上传组件<el-upload>,自定义上传按钮样式

    原理:调用el-upload组件的方法唤起选择文件事件 效果: 页面代码: js代码:(其他逻辑与element文档的上使用一致) css代码: 隐藏原来的选择图片按钮 原理:把图片显示分离出来,el-upload做选择图片使用,单独做一个显示图片的区域 效果:  页面代码: js 代码: css代码:

    2024年02月13日
    浏览(27)
  • 【前端相关】elementui使用el-upload组件实现自定义上传

    elmentui 中的upload默认的提交行为是通过 action 属性中输入的 url 链接,提交到指定的服务器上。但是这种url提交文件的方式,在实际的项目环境中往往是不可取的。 我们的服务器会拦截所有的请求,进行权限控制,密钥检查,请求头分析等安全行为控制。写在这里的url无法实

    2024年02月08日
    浏览(38)
  • vue element el-upload附件上传、在线预览、下载当前预览文件

    上传 在线预览(iframe): payload: response: 全部代码: 初版–01

    2024年02月14日
    浏览(34)
  • ElementUi 关于 el-upload的自定义上传(http-request)的使用

       在开发中 遇到如下需求,要求前端传参并导入excel表格。导入失败,要弹出错误信息,同时导出错误信息的excel表格,导入成功提示信息即可。 参考官方文档,把上传需要的属性加加入使用   改造之前: 设置headers信息 在el-upload标签中加入http-request ,如下: 具体操作方法

    2024年02月01日
    浏览(28)
  • vue3 el-upload 上传附件及预览 限制只能上传一个图片或者pdf格式的文件

    效果如图 直接看代码吧 template部分 css部分 js部分

    2024年02月11日
    浏览(44)
  • el-upload调用内部方法删除文件

    从Element UI 的官方文档中, Upload 上传组组件提供了on-remove和before-remove的文件删除的钩子属性(回调方法名),但如何调用组件删除方法(让该方法删除本地上传文件列表以及触发这两个钩子)并无相关说明。 在不定义file插槽(slot)的情况下,通过UI点击控件文件列表上文件的

    2024年02月10日
    浏览(23)
  • el-upload上传文件携带额外参数

    在进行文件上传时,需要传递其他参数,比如下图中需要实现携带下拉框的参数 前端实现:将下拉框中的参数 传递到:data中  :data=\\\"{\\\'script_model\\\':script_model}\\\"    后端实现: 从post请求中获取携带的参数:  script_model = request.POST.get(\\\'script_model\\\')

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包