当前位置: 首页 > news >正文

保存文件到指定位置,读取/删除指定文件夹中文件

使用背景

用户每次上传的文件太多,如果批量处理,服务器性能不够,所以将用户上传的文件保存到服务器上,再启动一个线程,依次处理完成后删除文件

用户上传文件

@PostMapping("/inFile")publicStringinFile(@RequestParam("file")List<MultipartFile>listFile,@RequestParamMap<String,String>params){// 创建临时文件夹FileSaveClearfsc=newFileSaveClear();fsc.createTempDirectory();listFile.forEach(file->{// 保存上传的文件到临时文件夹StringfilePath=fsc.saveFileToTemp(file);});//读取到指定文件夹中的所有文件List<MultipartFile>files=fsc.getAllTempFilesAsMultipartFiles();//启动一个线程处理对应的文件newThread(()->{System.out.println(LocalDateTime.now());files.forEach(file->{inFileRun(file,params);});//删除对应的文件fsc.deleteAllFilesInDirectory();System.out.println(LocalDateTime.now());}).start();return"inFile";}

文件保存/读取/删除代码

importorg.springframework.web.multipart.MultipartFile;importjava.io.ByteArrayInputStream;importjava.io.File;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;publicclassFileSaveClear{finalStringTEMP_FILE_PATH=System.getProperty("user.dir")+"/temp-files/";// 创建临时文件夹publicvoidcreateTempDirectory(){FiletempDir=newFile(TEMP_FILE_PATH);if(!tempDir.exists()){tempDir.mkdirs();}}// 保存文件到临时文件夹publicStringsaveFileToTemp(MultipartFilefile){try{StringfileName=System.currentTimeMillis()+"_"+file.getOriginalFilename();StringfilePath=TEMP_FILE_PATH+fileName;FiledestFile=newFile(filePath);file.transferTo(destFile);returnfilePath;}catch(Exceptione){e.printStackTrace();returnnull;}}/** * 删除指定文件夹中的所有文件 * @return 删除成功的文件数量 */publicintdeleteAllFilesInDirectory(){Filedirectory=newFile(TEMP_FILE_PATH);if(!directory.exists()||!directory.isDirectory()){return0;}File[]files=directory.listFiles();if(files==null){return0;}intdeletedCount=0;for(Filefile:files){if(file.isFile()&&file.delete()){deletedCount++;}}returndeletedCount;}/** * 读取临时文件夹中的所有文件,返回MultipartFile对象列表 * @return MultipartFile对象列表 */publicList<MultipartFile>getAllTempFilesAsMultipartFiles(){FiletempDir=newFile(TEMP_FILE_PATH);if(!tempDir.exists()||!tempDir.isDirectory()){returnnewArrayList<>();}File[]files=tempDir.listFiles();if(files==null){returnnewArrayList<>();}List<MultipartFile>multipartFiles=newArrayList<>();for(Filefile:files){if(file.isFile()){try{// 读取文件内容byte[]fileContent=java.nio.file.Files.readAllBytes(file.toPath());// 创建MultipartFile对象 - 使用自定义实现MultipartFilemultipartFile=newMultipartFile(){@OverridepublicStringgetName(){returnfile.getName();}@OverridepublicStringgetOriginalFilename(){returnfile.getName();}@OverridepublicStringgetContentType(){// 根据文件扩展名确定内容类型StringfileName=file.getName().toLowerCase();if(fileName.endsWith(".csv")){return"text/csv";}elseif(fileName.endsWith(".txt")){return"text/plain";}elseif(fileName.endsWith(".xlsx")||fileName.endsWith(".xls")){return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";}else{return"application/octet-stream";}}@OverridepublicbooleanisEmpty(){returnfileContent.length==0;}@OverridepubliclonggetSize(){returnfileContent.length;}@Overridepublicbyte[]getBytes()throwsIOException{returnfileContent;}@OverridepublicInputStreamgetInputStream()throwsIOException{returnnewByteArrayInputStream(fileContent);}@OverridepublicvoidtransferTo(Filedest)throwsIOException,IllegalStateException{java.nio.file.Files.write(dest.toPath(),fileContent);}};multipartFiles.add(multipartFile);}catch(Exceptione){System.err.println("读取文件 "+file.getName()+" 时出错: "+e.getMessage());}}}returnmultipartFiles;}}
http://www.rkmt.cn/news/152527.html

相关文章:

  • 2025年南方网通渠道经理推荐排行榜,新测评精选南方网通招商合作公司推荐 - 工业品牌热点
  • 2025精密轧机制造厂TOP5权威推荐:精密轧机生产哪家好 - mypinpai
  • C++终端文字颜色设置库推荐
  • 如何使用ModelEngine平台快速构建爆款文案创作智能体,大幅提升内容创作效率
  • 2025年天津茅台酒回收服务公司推荐:茅台酒回收服务怎么联系? - 工业推荐榜
  • 2025年超声波分散设备知名企业排行榜,智能型纳米超声波分散器厂家推荐 - 工业推荐榜
  • Shotgun蛋白质测序
  • 使用Dify构建辩论赛论点生成助手
  • 2025年值得推荐的铝代木构件供应商TOP5:靠谱供应商推荐 - myqiye
  • 别再烧钱了!:如何用消费级显卡成功部署Open-AutoGLM?实测数据说话
  • scheme的画家问题
  • 使用Dify构建酒吧鸡尾酒配方推荐系统
  • 【节点】[ChannelMask节点]原理解析与实际应用
  • 【Open-AutoGLM模型替换全攻略】:手把手教你5步更换大模型实现性能跃升
  • 7、神经网络构建与优化全解析
  • Open-AutoGLM安装失败?99%的人都忽略了这1个核心配置项
  • Open-AutoGLM大模型迁移实战(99%工程师不知道的3个关键细节)
  • 错过Open-AutoGLM你就落伍了?2024最值得star的AI编码项目全面曝光
  • 学长亲荐10个AI论文平台,自考本科轻松搞定!
  • Dify平台求职面试问题预测与回答指导功能
  • 10、自定义优化器与正则化技术在深度学习中的应用
  • AI侦探P.I.项目:计算机视觉与生成式AI协同质检
  • GSV2005@ACP#2005产品规格参数详解及产品应用分享
  • Open-AutoGLM开源了!10分钟部署本地AI编程环境,开发者速进
  • GSV6703@ACP#6703产品规格详解及产品应用分享
  • cobaltstrike配置与搭建
  • 欧莱诺门窗可信度高吗?专业门窗品牌市场口碑与详细介绍全解析 - myqiye
  • 12、简化与架构:迈向敏捷软件开发的关键路径
  • 2025年河南环保设备品牌排行榜,河南亚科环保客户评价如何? - mypinpai
  • Dify平台社交媒体内容策划助手应用实例