0


Ant Design upload 文件上传 限制文件只能上传一个

上传前:

回显:可以删除

最近做了一个后台管理系统使用的是 Ant Design和vue框架搭建的

文件上传:组件: Ant Design https://1x.antdv.com/components/upload-cn/ (upload 官方文档)

功能需求:1.可以拖拽,或者点击上传文件 2.只能上传单个文件,不能上传多个文件。3.导入文件只能是 xls、xlsx格式 4.文件大小不能超过10M 5.点击取消,如果当前有文件正在上传,提示 用户,没有的话,关闭弹窗

具体思路:1.点击文件上传之前判断文件的格式/大小符合条件展示,不符合条件提示用户。2.点击确定时,判断文件是否存在,后端需要接受的参数是 formData数据,对文件进行处理。调用接 口,成功后,更新数据,不成功,提示用户。3.点击取消,如果当前有文件正在上传,提示用户,没有的话,关闭弹窗

注意事项:1.因为antd upload 上传多个文件自带remove 回调函数,但是如果fileList 只有一个文件时,需要自己调用remove 回调函数,否则,上传文件后的删除按钮失效。

              2.因为我的需求是只能上传一个文件,所以在上传文件之前,不仅要判断格式,还要限制fileList中只能有一个数据,那么也就是后传的文件,要覆盖先传的文件。

              3.因为是我自己封装的组件,需要注意父子组件传递数据的问题~~~~~

接下来上代码。

HTML部分

<template>

  <div class="dialog">

    <a-modal :visible="visible1" :confirmLoading="loading1" width="20%" :title="title1 === 'batch' ? '推广' : ''" centered

      @cancel="() => { $emit('cancelBatch',fileList) }" @ok="() => { $emit('okBatch', fileList) }">

      <div>

        <span style="margin-right: 20px; margin-bottom: 10px;display: inline-block;">导入模板</span>

        <a :href='template' @click="downLoad">下载</a>

      </div>

      <a-upload-dragger name="file" :before-upload="handleBeforeUpload" :file-list="fileList"  :remove="handleTableRemove">

        <p class="ant-upload-drag-icon">

          <a-icon type="inbox" />

        </p>

        <p class="ant-upload-text">

          点击或将文件拖拽到这里上传

        </p>

        <p class="ant-upload-hint">

          支持扩展名:.xlsx .xls

        </p>    

      </a-upload-dragger>

    </a-modal>

  </div>

</template>

Script部分

​
​
 //删除icon  

    handleTableRemove: function (file) {

      const index = this.fileList.indexOf(file);

      const newFileList = this.fileList

      newFileList.splice(index, 1);

      this.fileList = newFileList;

    },

    handleBeforeUpload: function (file, fileList) {

      this.file = file

      console.log(file, fileList);

      //判断文件大小

      const isLt10M = file.size / 1024 / 1024 < 10

      if (!isLt10M) {

        this.$message.error(file.name + '文件大小超出限制,请修改后重新上传')

        return false

      }

      //判断上传文件格式

      let extension = file.name.split('.')[1] === 'xls';

      let extension2 = file.name.split('.')[1] === 'xlsx';

      if (!extension && !extension2) {

        this.$message.warning('导入文件只能是 xls、xlsx格式!');

        return false

      }

      this.fileList = [...this.fileList, file];

      //限制文件只能上传一个

      this.fileList = this.fileList.slice(-1);

      return false

    },

​

​

点击确认

okBatch(fileList) {

      if (fileList.length > 0) {

        // file 是上传的文件

        // 后端需要接受的参数是 formData数据,

        const form = new FormData()

        form.append('file', fileList[0])

       //点击确定后先让确定按钮loading

        this.confirmLoading1 = true

        importTask(form).then((res) => {

          if (res.code === 2000) {

           //上传成功后取消loading

            this.confirmLoading1 = false

            this.visible1 = false

            this.$message.info(res.message)

            //重置列表数据

            this.handleReset()

          } else if (res.code === 5000) {

            this.$message.error(res.message)

            this.confirmLoading1 = false

          } else {

            this.$message.error(res.message)

            this.confirmLoading1 = false

          }

        })

      } else {

        this.$message.error('您还没有上传文件!')

      }

    },

点击取消

 cancelBatch() {

        if (!this.confirmLoading1) {

          this.visible1 = false

        } else {

          this.$message.error('您正在上传文件!')

        }

    },

具体就是这样完成的。

写的比较菜,有问题欢迎在评论区提出讨论,谢谢!


本文转载自: https://blog.csdn.net/cy1291629279/article/details/130601915
版权归原作者 bug大王~ 所有, 如有侵权,请联系我们删除。

“Ant Design upload 文件上传 限制文件只能上传一个”的评论:

还没有评论