vue3+ant design vue 自定义文件上传和自定义上传进度条

简介: 1.关键点是Upload组件中customRequest的API,它能通过覆盖默认的上传行为,可以自定义自己的上传实现(具体可看官方文档);2.通过在Upload组件中绑定progress实现。下面是详细代码

<!-- html部分 -->

     <a-upload-draggerref="upload"  name="file" :multiple="true"

           :customRequest="customRequest"

           :progress="progress"

     @drop="handleDrop"

     @remove="removeFile">

       <pclass="ant-upload-drag-icon">

         <inbox-outlined></inbox-outlined>

       </p>

       <pclass="ant-upload-text">点击或拖拽文件上传</p>

       <pclass="ant-upload-hint">

         支持单个或批量上传。

       </p>

     </a-upload-dragger>


// 上传进度条(直接拿官方的样式)

 constprogress: UploadProps['progress'] = {

   strokeColor: {

     '0%':'#108ee9',

     '100%':'#87d068'

   },

   strokeWidth:3,

   format: (percent: any) =>`${parseFloat(percent!.toFixed(2))}%`,

   class:'test'

 }


// 存储要上传的文件(用于后续有需要的操作)

letneedFile: FormData = newFormData();


 // 上传文件 请求

 constemployeeFileUpload = async (File: { file: any; onProgress?: any; onSuccess?: any }) => {

   const { file, onProgress, onSuccess } = File

       constformData = newFormData();

       // 注意 这个file 是一个对象 我们只要里面的 file

       formData.append('file', file)

         formData.append('page',String(PreviewData.page)) //这是我自己的功能需求所需的参数,可不看

         needFile = formData;

         // 进度条相关配置:

         letconfig = {

         timeout:120000,

         onUploadProgress: (Progress: { loaded: number; total: number }) => {

           letpercents = Math.round((Progress.loaded * 100) / Progress.total)

           // 更新进度条

           onProgress({ percent:percents }, file)

         }

       }

       constres: any = awaitreqUploadFilePreview(formData,config)

       console.log(res, 'res  --->');

       if (res.code === 200) {

         // 如果预上传成功:进度条成功,并将数据返回给表格(这也是个人功能需求,只需要看onSuccess即可)

         onSuccess(res, file)

         dataSource.value = res.data.data;

         total.value = res.data.total

         returnres.data;

       }

       returnPromise.reject(newError(res.msg));

     }


// 组件绑定该自定义预上传方法

 constcustomRequest = async(file: any)=>{

   // 接口请求

   employeeFileUpload(file).then((request: any) => {

         message.success(request.msg);

       }).catch((e) => {

         message.error(e.msg);

       });

 }


下面是接口api

//上传文件的请求

exportconstreqUploadFilePreview: (data: any,config?: object) =>Promise<AxiosResponse> = (data,config) =>

 request({

   url:'你的url',

   method:'post',data, ...config

 });

目录
相关文章
|
10天前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
113 2
|
3月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
105 0
|
3月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
238 1
|
4月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
544 0
|
6月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
763 4
|
4月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
5月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
540 77
|
6月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
4月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
366 17