首页 > 其他分享 >antd的upload组件的各种上传、下载操作(vue)

antd的upload组件的各种上传、下载操作(vue)

时间:2023-06-01 21:03:47浏览次数:57  
标签:文件 vue url fileList2 upload fileList item antd 上传

作为前端小白刚刚接触上传、下载文件的操作也让我很头疼,所以利用时间记录一下方便巩固,希望能够帮到大家。

我将情况分为以下几种:

一、点击按钮上传单个文件

//html
<a-upload
                :action="baseUrl + '/api/uploadSingleFile'" 
                :headers="headers"
                :file-list="fileList"
                @change="handleChange_file">
                <a-button>
                  <a-icon type="upload" /> 上传文件
                </a-button>
</a-upload>
//action表示上传的地址,baseUrl是我们公司服务器的IP地址,加上后面的接口地址就组成了完整的上传地址
//headers表示设置上传的请求头部,因为是后台管理系统所以会在里面存放必要的token
//file-list 就是我们上传文件的数组,一个文件就是一个数组元素
//@change就是提交文件的回调
 
 
//data
{
  baseUrl: baseUrl,
  headers: { accesstoken: sessionStorage.getItem("accessToken") },
  fileList:[],
  fileList2:[]
}
//这里除了fileList要需要fileList2的原因是:如果上传按钮下需要展示文件列表就必须是
{
   url: res,
   status: "done",
   name: res,
   uid: index + 1,
}
的对象形式,我们用fileList2来存储文件的下载链接也就是fileList中url的res
 
//methods
    handleChange_file(info) {
      let fileList = [...info.fileList];
      //这一行用来决定上传文件的限制个数,-1就表示1个,-2就是2个依次类推...
      fileList = fileList.slice(-1);
      //这里判断文件是否上传成功
      if (info.file.status === "done") {
        //判断是否正确链接上传地址
        if (info.file.response.code == 0) {
          let arr = fileList;
          this.fileList2 = [];
          //上传成功会把接口返回的下载链接存入fileList2
          arr.forEach((item) => {
            if (item.url) {
            this.fileList2.push(item.url);
          } else if (item.response) {
            this.fileList2.push(item.response.data);
          }
          });
          this.$message.success(`${info.file.name} 上传成功!`);
        }
        //如果是移除文件也会重新填入fileList2
      } else if (info.file.status === "removed") {
        let arr = fileList;
        this.fileList2 = [];
        arr.forEach((item) => {
           if (item.url) {
            this.fileList2.push(item.url);
          } else if (item.response) {
            this.fileList2.push(item.response.data);
          }
        });
      }
      this.fileList = [...fileList]; //重点
    },

二、点击按钮上传多个文件

上面就说过了,把filelist中的数字换一下就行了。

三、上传单个按钮但是不想显示文件列表

antd会像这样上传成功后自动生成列表,但是有时候我们不需要,我们在a-upload下填入

:showUploadList="false"  属性就可以了

四、下载文件(单个)

一般通过动态创建a标签,给url的地址改为文件下载地址就可以了

const a = document.createElement("a");
          a.href = record.filePath;
          document.body.appendChild(a);
          a.click();
          document.body.removeChild(a);

五、下载文件(多个)

一般是通过upload组件把文件列表展示出来,这样一点击就可以下载了

clickModel(record) {
      this.visible = true;
      this.fileList = [];
      let arr = record.filePath;
      arr.forEach((res, index) => {
        this.fileList.push({
          url: res,
          status: "done",
          name: res,
          uid: index + 1,
        });
      });
    },
//这里调用的是a-modal的回调让modal悬浮框显示出来同时,在文件列表中放入我们需要的文件。
//一定要严格按照 url + status + name + uid 的格式。




标签:文件,vue,url,fileList2,upload,fileList,item,antd,上传
From: https://blog.51cto.com/u_15997490/6398082

相关文章

  • SpringBoot SSM vue 在线办公系统
    SpringBootSSMvue在线办公系统系统功能登录忘记密码首页统计分析用户管理员工管理公告管理考勤管理绩效管理薪酬管理流程管理留言管理文件管理开发环境和技术开发语言:Java使用框架:SpringBoot或SSM +Mybatis+MysqlSpringBoot是一个用于构建Java应用......
  • uniapp 组件中使用页面的生命周期(vue2)
    用于直接在组件中使用onLoad,onBackPress等因为之前在写App的时候有许多弹窗,希望可以在有弹窗的时候先关闭弹窗,没有弹窗在执行返回事件,因此需要在页面onBackPress里面写很多判断,因此找了一些方法,写了可以直接在组件中调用页面生命周期的方法!使用mixinthis.$children去循环查询......
  • 通过实例了解vue3.3更新的特征
    开场白5月份,vue团队发布了vue3.3.这次小版本的发布主要解决了--Vue与TypeScript一起使用时的许多长期存在的痛点.下面我们一起来学习一下vue3.3新特征准备新新特征的环境根据官方团队的描述,我们需要准备一下工作。vue升级到3.3时,建议同时更新以下依赖项:Volar/vue......
  • 【Vue】 vue项目的目录结构
    ├──build/#Webpack配置目录├──dist/#build生成的生产环境下的项目├──config/#Vue基本配置文件,可以设置监听端口,打包输出等├──node_modules/#依赖包,通常执行npmi会生成├──src/......
  • 【Vue】的API风格_选项式API和组合式API
    API风格API风格可分选项式API和组合式API。选项是API(OptionsAPI)使用选项式API,可以用包含多个选项的对象来描述组件的逻辑,例如  data、 methods 和  mounted 。选项所定义的属性都会暴露在函数内部的this上,它会指向当前的组件实例。1<script>2exp......
  • vue xlsx组件 导出的excel表头插入内容
    主要就是sheet_add_dom这个方法,dom是带有table标签元素的dom节点。timeData是个二维数组:[["条件1","条件2"],["值1","值2"]];如果是要在表格内容行里面插入内容,可以直接在与表格绑定的对象上,插入内容就可以了。/*timeData是二维数组*/getExcelWithInfo(timeData,dom,tit......
  • vue介绍和基本使用,插值语法,文本指令和事件指令
    1前端的发展史#1HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看 -javascript=ECMAScript(5,6,13)+Dom+Bom#2Ajax的出现->后台发送异步请求......
  • vue2项目中使用dhtmlx gantt甘特图插件
    官网示例地址:https://docs.dhtmlx.com/gantt/samples/可以在这里查看绑定数据的格式安装依赖npminstalldhtmlx-gantt--save创建一个甘特图组件<template><el-scrollbarref="gantt_scrollbar"class="gantt-box"><divref="gantt"class=&qu......
  • vue3实现元素监听滚动事件
    //useScroll.jsimport{debounce}from'@/common/util.js'exportdefaultfunctionuseScroll(elRef){console.log('########3useScroll',elRef.value)letel=windowconstisReachBottom=ref(false)constclientHeight=ref(0......
  • VuePress2.0构建项目文档系统
    VuePress2.0构建项目文档系统参考TerraMours官网。https://terramours.site/文件结构参考:1.修改首页README.md修改项目下的README.md,修改内容:---home:trueheroImage:images/hero.pngheroText:TerraMoursactions:-text:快速开始link:/guide/type:pr......