安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

SpringBoot上传文件返回进度

9月5日 萌嘟嘟投稿
  导入的包dependencygroupIdcommonsfileuploadgroupIdcommonsfileuploadartifactIdversion1。4versiondependency根据自己需要dependencygroupIdorg。projectlombokgroupIdlombokartifactIdoptionaltrueoptionaldependency进度返回类authorLinuxsuser:FBdevice:Windows11createtime:202232remarks:〔〕DatapublicclassProgressimplementsCloneable{privatelongbytesRprivatelongcontentLprivatestaticfinalProgressprogressnewProgress();publicstaticProgressgetInstance(){returnprogress。clone();}OverridepublicProgressclone(){try{return(Progress)super。clone();}catch(CloneNotSupportedExceptione){thrownewAssertionError();}}}文件上传监听器ComponentpublicclassFileUploadListenerimplementsProgressListener{privatefinalMapString,ProgressmapnewConcurrentHashMap();privatefinalHttpServletRpublicFileUploadListener(HttpServletRequestrequest){this。}parambytesRead当前上传大小paramcontentLength总大小paramitems当前上传个数Overridepublicvoidupdate(longbytesRead,longcontentLength,intitems){ProgressprogressProgress。getInstance();progress。setBytesRead(bytesRead);progress。setContentLength(contentLength);progress。setItems(items);可替换成redissessionmap。put(request。getHeader(file),progress);}publicProgressgetMap(Stringheader){returnmap。get(header);}}文件上传解析器ComponentpublicclassCustomMultipartResolverextendsCommonsMultipartResolver{privatefinalFileUploadListenerfileUploadLpublicCustomMultipartResolver(FileUploadListenerfileUploadListener){this。fileUploadListenerfileUploadL}OverrideprotectedMultipartParsingResultparseRequest(HttpServletRequestrequest)throwsMultipartException{StringencodingdetermineEncoding(request);FileUploadfileUploadprepareFileUpload(encoding);设置上传监听器fileUpload。setProgressListener(fileUploadListener);try{ListFileItemfileItems((ServletFileUpload)fileUpload)。parseRequest(request);returnthis。parseFileItems(fileItems,encoding);}catch(FileUploadBase。SizeLimitExceededExceptionvar5){thrownewMaxUploadSizeExceededException(fileUpload。getSizeMax(),var5);}catch(FileUploadBase。FileSizeLimitExceededExceptionvar6){thrownewMaxUploadSizeExceededException(fileUpload。getFileSizeMax(),var6);}catch(FileUploadExceptionvar7){thrownewMultipartException(Failedtoparsemultipartservletrequest,var7);}}}Controller接口RestControllerpublicclassUploadController{privatefinalUploadServiceuploadSpublicUploadController(UploadServiceuploadService){this。uploadServiceuploadS}PostMapping(upload)publicRupload(MultipartFile〔〕file){uploadService。upload(file);returnR。ok()。message(上传成功);}GetMapping(progress)publicRprogress(HttpServletRequestrequest){Stringfilerequest。getHeader(file);if(StringUtils。isNullOrEmpty(file))returnR。error()。message(需要header:〔filexxx〕标识);returnR。ok()。message(uploadService。getUploadDone(file)?上传完成:上传中。。。)。data(uploadService。getProgressStyle(file));}}Service实现类ServicepublicclassUploadServiceImplimplementsUploadService{privatefinalStringBuilderstringBuildernewStringBuilder();privatefinalMapString,ObjectmapnewHashMap(4);构造注入上传监听privatefinalFileUploadLpublicUploadServiceImpl(FileUploadListenerlistener){this。}返回进度参数信息progress:〔〕100,item:3,percent:100,status:overparamheader文件标识returnMapString,Object进度MapOverridepublicMapString,ObjectgetProgressStyle(Stringheader){Progressprogresslistener。getMap(header);if(progressnull)thrownewCustomException(未上传文件);longreadprogress。getBytesRead();longpercent0;if(read!0)percent(read100)progress。getContentLength();map。put(percent,percent);map。put(status,percent100?over:active);map。put(progress,getStyleOfCount(percent));map。put(item,progress。getItems());}判断文件是否上传文成paramheader文件标识returntruefalseOverridepublicbooleangetUploadDone(Stringheader){Progressprogresslistener。getMap(header);if(progressnull)thrownewCustomException(未上传文件);returnprogress。getBytesRead()progress。getContentLength();}文件保存操作这里做存储文件等其他操作操作这里也需要返回进度的话,上面的进度需要2,各记50paramfile文件Overridepublicvoidupload(MultipartFile〔〕file){Arrays。asList(file)。forEach(f{if(f。isEmpty()){thrownewCustomException(文件为空);}else{System。out。println(文件名:f。getOriginalFilename());System。out。println(文件大小:f。getSize());System。out。println(文件类型:f。getContentType());}});}进度样式parampercent进度百分比return〔〕30privateStringgetStyleOfCount(longpercent){stringBuilder。setLength(0);stringBuilder。append(〔);for(inti0;ipercent10;i){stringBuilder。append();}for(inti0;i10(percent10);i){stringBuilder。append();}stringBuilder。append(〕)。append(percent)。append();returnstringBuilder。toString();}}效果
  上传准备
  点击上传后,file是文件的唯一标识,上传时也需要传入
  然后看效果(item是文件个数)
  项目地址:
  SpringBoot上传返回进度【最新】小波博客
投诉 评论 转载

8扬声器2。5K屏幕67W快充骁龙870高生产力的平板推荐第手机已经成为现代人不可或缺的工具了,但手机的生产力终究不如平板,一些人喜欢用大屏追剧,用来画画,学习,记笔记,这个时侯拥有一块好的平板就显得尤为重要,下面就来给大家推荐一款高性……没有了顺风车给你造成了什么困扰?谢谢邀请!滴滴顺风车关闭已经有三个月了,三个月里基本每次出去都是叫的快车,快车价格比顺风车贵出一倍多,体验和顺风车也差不多了,如果要说困扰,那就是少了一个出行的选择,多付……预警盘古社区发行FIST拳头币圈钱上百亿,即将收割跑路昨天暗火了解到一个项目,今天拿出来给各位讲讲,这是一个名叫盘古社区的项目,打着让穷人财富自由的幌子,拉人进群后通过腾讯会议不断洗脑,然后让你购买其发行的虚拟货币,最后达到收割韭……iPhone13ProMax1TB只要7000块?不仅是扩容网友说在朋友圈看到一台iPhone13ProMax1TB,价格非常便宜,只要7000块。问我能不能买!7000块的iPhone13ProMax1TB你敢相信?反正我不相信……SpringBoot上传文件返回进度导入的包dependencygroupIdcommonsfileuploadgroupIdcommonsfileuploadartifactIdversion1。4versio……PythonFlask实现接口接收CPU信息今天的内容是基于PythonFlask实现接口接收内存信息来进一步分享如何使用PythonFlask接收CPU的信息。原理:通过Python调用Shell脚本去执行……聚焦经营痛点微宝贝或破实体店发展难题新湖南客户端12月9日讯(通讯员王佳)新一轮科技革命和产业变革下,经济社会数字化转型呈现加速深化趋势。实体店经营在电子商务的冲击下迎来了巨大挑战。一方面,受互联网冲击、房租人力……AI落地智能制造,TE这场比赛实现了教学相长这个比赛和我之前参加过的其他比赛完全不同,它的解决方案与设计直接贴合一线生产,实际部署也能够快速验证方案的有效性,深入一线了解设计、验证、打磨和迭代的过程,让我们的团队对AI技……中国芯片产业的突破!新一代国产先进光刻机来了,有两个重大意义众所周知,我国在光刻机领域一直处于弱势地位,国内芯片行业的先进光刻机一直依靠进口。《科技日报》在2018年曾经评选出35项制约我国工业发展的卡脖子技术,芯片和光刻机名列前二。……如何保养新能源汽车?随着国家对新能源汽车的大力推广、消费者对新能源汽车认可度的提高,新能源汽车已经走进了我们的生活。新能源汽车与传统汽车的根本区别在于动力燃料供应,因此在日常保养方面也有很大差别。……即热式电热水器到底安不安全?大家好,我是家居领域的乡村里的小伙子,在厨电卫浴行业中工作了十多年,对厨电卫浴的知识有专业的答案,我会把我知道的知识分享给大家,希望大家多多的支持和关注!说到即热式电热水器,大……北京五天发生三起工地意外事故致四人死亡苹果回应系统升级后性能今天的热点新闻你都知道了吗?社会类1、猪牛羊肉上周批发价格都降了据商务部监测,上周(5月3日9日)肉类价格有所下降。其中,猪肉批发价格为每公斤29。07元,下……
B2B2C分销商城系统,带进货模块,二级分销商城Java系统远程操控大脑成为现实?我们的大脑会被控制吗?台积电张忠谋赴美建厂是无奈,美国芯片制造成本太高国内手机市场风云突变,realme品牌月销破百万,华为和荣耀新房装修,家里WiFi怎么弄?安卓手机安装鸿蒙系统,APP必须要在华为应用商店下载吗?轻薄5G千元机的扛把子,OPPOK9图赏,这波诚意如何?单反相机已经落伍新宠微单相机强在哪日本科技一直在金字塔顶端,为何日本手机无人问津?2022年最佳手机屏幕推荐,远离低素质劣屏,不花冤枉钱国产敏捷开发项目管理软件趋势上海是目前我国最繁华的城市吗?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利