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

本文介绍了使用Ant Design实现前端文件上传和下载的方法,包括单文件和多文件上传、显示文件列表及下载操作。

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

  我将情况分为以下几种:

1.点击按钮上传单个文件

//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]; //重点
    },

2.点击按钮上传多个文件

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

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

 

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

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

4.下载文件(单个)

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

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

5.下载文件(多个)

一般是通过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项目中封装Ant Design Vue (简称AV)Upload 组件可以帮助你更方便地管理文件上传的功能,并保持代码整洁。以下是步骤概述: 1. **安装依赖**: 首先需要安装 `@antv/vue-upload` 和 `axios` 或者 `fetch` 等用于发送请求的库。可以使用 npm 或 yarn 安装: ``` npm install @antv/vue-upload axios ``` 2. **创建封装的Upload组件**: 创建一个名为 `Upload.vue` 的文件,例如: ```html <template> <a-upload :action="uploadUrl" :on-success="handleSuccess" :before-upload="beforeUpload"> <a-icon type="upload" slot="trigger"></a-icon> <p slot="text">点击上传</p> <a-button type="primary" slot="dragger" @click="submitFile">选择文件</a-button> </a-upload> </template> <script> export default { components: { ... }, data() { return { uploadUrl: '', file: {}, submitting: false, }; }, methods: { beforeUpload(file) { // 可以在这里做预处理,比如检查文件类型、大小等 if (/* your conditions */) { return true; } return false; }, handleSubmit() { this.submitting = true; }, handleSuccess(res) { this.file = {}; this.submitting = false; console.log('上传成功', res); }, }, }; </script> ``` 3. **在父组件中使用**: 在需要上传功能的地方引入并使用这个封装好的 Upload 组件,传入相应的 URL 和其他配置选项。 4. **额外配置**: - 如果需要上传文件前的验证,可以在 `beforeUpload` 方法中添加自定义逻辑。 - 可以设置上传进度条、断点续传等功能,查看 Ant Design Vue Upload 文档获取更多信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值