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

hutool实现文件上传与下载

        <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>

文件上传需要创建一个表

 

@Autowiredprivate SysFileInfoMapper sysFileInfoMapper;@Value("${ty.profile}")private String profile;@PostMapping("/add")public AjaxResult addSave( MultipartFile file, SysFileInfo fileInfo) throws IOException{//获取文件名2.txtString originalFilename = file.getOriginalFilename();//给文件名添加前缀年月日时分秒毫秒,防止文件名称重复给顶掉String fileName = DateUtils.parseDateToStr("yyyyMMddHHmmssSSS", DateUtils.getNowDate()) +"_"+ originalFilename;//获取文件路径,主路径+文件名String path = profile+"/"+fileName;//使用huTool工具类实现文件上传FileUtil.writeBytes(file.getBytes(),path);//将文件名和文件路径存入表中fileInfo.setFileName(fileName);fileInfo.setFilePath(path);sysFileInfoMapper.insert(fileInfo);return AjaxResult.success("成功");}/*** 本地资源通用下载*/@GetMapping("/common/download/resources")public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)throws Exception{try {ServletOutputStream outputStream = response.getOutputStream();//根据文件名称查询文件路径LambdaQueryWrapper<SysFileInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(SysFileInfo::getFileName,resource);SysFileInfo sysFileInfo = sysFileInfoMapper.selectOne(lambdaQueryWrapper);if (ObjectUtil.isNotNull(sysFileInfo)){String filePath = sysFileInfo.getFilePath();response.setCharacterEncoding("utf-8");response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(sysFileInfo.getFileName(), "UTF-8"));response.setContentType("application/octet-stream");//通过文件的路径读取文件字节流,通过response的输出流返回文件outputStream.write(FileUtil.readBytes(filePath));outputStream.flush();outputStream.close();}}catch (Exception e){throw new SecurityException("文件下载失败");}}
http://www.lryc.cn/news/189970.html

相关文章:

  • vue3学习源码笔记(小白入门系列)------provide和 inject 跨层级数据传递原理
  • 【Python深度学习】目标检测和语义分割的区别
  • 取消加考!自考专业调整,2026年起执行新计划!
  • 项目串讲(后端)要讲哪些东西?
  • 区块链技术在供应链管理中的创新应用
  • tcp/ip协议2实现的插图,数据结构2 (9 - 章)
  • 嵌入式Linux裸机开发(六)EPIT 定时器
  • 如何批量导出文件名?
  • sort排序
  • 缓存的力量:提升API性能和可扩展性
  • 部署vSAN相关的名词解释 几句话概括
  • 【C++】进阶模板
  • 易点易动设备管理系统:打通采购管理的智能化设备管理解决方案
  • 成集云 | 管家婆ERP集成金蝶云星辰 | 解决方案
  • Django开发之进阶篇
  • 【C++】:类和对象(3)
  • windows创建服务:更新服务信息乱码问题(ChangeServiceConfig)
  • Spark 9:Spark 新特性
  • Angular+html+js前端加载生命周期
  • 社区投稿| 以安全视角,深度剖析 Sui Staking 与 LSD
  • AM@邻域@极限定义中的符号说明
  • 论Oracle兼容性,我们需要做什么
  • 你知道多号发圈的同时并延迟评论的方式吗?
  • 【BugBounty】记一次XSS绕过
  • Linux文件目录结构详解:根目录和常见子目录介绍
  • 知识付费小程序的推广与用户增长策略
  • 微信小程序 获取当前屏幕的可见高宽度
  • 使用 Splashtop 驾驭未来媒体和娱乐
  • Tomcat项目启动报错
  • offer