ant-design-pro-vue 文件上传 upLoad 组件的一些使用经验

ant-design-pro-vue 文件上传 upLoad 组件的一些使用经验

因为工作中需要使用文件上传功能上传附件,公司的后台使用 ant-design-pro + vue 作为前端开发技术栈,因此使用了 ant-design-pro-vue 里面的 upLoad 组件来进行开发。在开发过程中遇到了一些问题,现将一些问题分享出来,希望能帮到后面遇到类似问题的小伙伴尽快脱坑。

组件上传的状态没有改变

猜测原因: 是由于对象数组中对象的浅拷贝导致数组没有监测到数据的改变,无法更新状态。
处理方式: 每次修改完状态后将文件列表数组重新赋值。

    this.fileList = [...fileList] // fileList 是我在项目中存放文件列表对象数组的属性值

使用自定义上传组件时删除文件会报错

猜测原因: 报错好像是 .abort() 找不到这个方法。因为目前业务的上传附件逻辑是将文件上传至服务器上的临时文件夹,删除文件时只需要删除文件列表中该文件的对象即可,不需要其他操作。所以也不需要用这个 .abort() 方法,但是组件的自定义上传方法的源码里面好像默认有执行 abort() 方法。
处理方式: 我发现在多文件上传时,一次性选择多个文件,beforeUpload 回调会执行多次(次数为选中文件的个数),因此,我考虑索性不用官方给的自定义上传函数了,直接在 beforeUpload 函数中把文件对象处理了之后直接上传。

	beforeUpload (file, fileList) {
		// 先进行上传文件的验证,不符合上传要求的文件直接 return false 不给继续执行
		this.validateFile() // 自定义文件上传验证
		this.upLoadFile() // 自定义上传文件,通过接口把文件存至服务器临时目录下
		return false // 记住最后一定要 return false 来取消组件的默认上传,否则会报错
	}

前端初学者,对源码的理解还不够深入,upLoad 组件使用也还不够多,写这个的主要原因是加深自己的理解,有机会提升自己的能力,以后若有遇到新问题会继续更新,如果恰好碰到有遇到同样问题,希望能为你解决问题提供帮助!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3.0中使用ant-design-vue上传文件,可以按照以下步骤进行: 1. 安装ant-design-vue和axios ``` npm install ant-design-vue axios --save ``` 2. 在main.js中引入ant-design-vue和axios,并注册组件 ``` import { createApp } from 'vue' import App from './App.vue' import { Button, Upload } from 'ant-design-vue' import axios from 'axios' const app = createApp(App) // 注册组件 app.use(Button) app.use(Upload) // 注册axios app.config.globalProperties.$axios = axios app.mount('#app') ``` 3. 在组件使用Upload组件进行文件上传 ``` <template> <div> <a-upload :action="uploadUrl" :headers="uploadHeaders" :data="uploadData" :before-upload="beforeUpload" :on-success="onSuccess" :on-progress="onProgress" :on-error="onError" > <a-button>上传文件</a-button> </a-upload> </div> </template> <script> export default { data() { return { uploadUrl: 'http://localhost:3000/upload', uploadHeaders: { Authorization: 'Bearer ' + localStorage.getItem('token') }, uploadData: { name: 'example' } } }, methods: { beforeUpload(file) { console.log('beforeUpload', file) }, onSuccess(response) { console.log('onSuccess', response) }, onProgress(progress) { console.log('onProgress', progress) }, onError(error) { console.log('onError', error) } } } </script> ``` 在上面的示例中,我们使用了a-upload组件上传文件。在组件中,我们可以通过props传入一些参数,比如上传接口的地址、请求头、上传的数据等。同时,还可以通过监听事件来处理上传的结果,比如上传成功、上传进度、上传失败等。 需要注意的是,我们在main.js中通过Vue的全局配置将axios注册到了Vue实例中,因此在组件中可以通过this.$axios来发起请求。在上传文件时,需要将文件数据添加到uploadData中,这样才能将文件上传到服务器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值