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

Springboot 文件上传下载相关问题

文章目录

  • 关于Springboot 文件上传下载问题解决方案
    • 注意事项
    • 文件上传
    • 文件下载
    • 文件删除
    • 文件在线打开
    • 在写练习的时候,发现了一些小小的问题,已经在 上述代码中体现。
      • ① 代码路径碰到中文的时候,会有乱码,需要转换(内容中已解决)
      • ② 在下载文件的时候,无需转跳问题(内容中已解决)

关于Springboot 文件上传下载问题解决方案

我觉得最好的办法就是将这些代码先写一遍出来,然后再琢磨一下是什么原理,虽然代码有些繁琐

注意事项

在这里插入图片描述

我们可以注意到,这个文件上传 的 enctype 格式必须设置成 “multipart / from-data” 哦。

文件上传

先把需求罗列出来
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码如下:

    @PostMapping("/addFile")public String addFile(MultipartFile file,HttpSession request) throws IOException {// 获得旧文件名称String originalName = file.getOriginalFilename();// 获取文件的后缀String ext = "." + FilenameUtils.getExtension(originalName);// 获得新文件名称String newName = new SimpleDateFormat("yyyyMMdd").format(new Date()) + UUID.randomUUID().toString().replace("-","")+ext;// 获得储存的路径String path = ResourceUtils.getURL("classpath:").getPath()+"static/test/";String path1 = URLDecoder.decode(path, "utf-8");// 获取新的文件夹,要是不存在,就默认创建java.io.File files = new java.io.File(path1 + newName);if(!files.exists()) {boolean b = files.mkdirs();};// 获取文件的大小String size = file.getSize() + "kb";// 上传文件file.transferTo(files);File f = new File();f.setId(UUID.randomUUID().toString());f.setOldName(originalName);f.setNewName(newName);f.setExt(ext);f.setPath(path1);f.setSize(size);String houZhui = FilenameUtils.getExtension(originalName);if(houZhui.equals("png") || houZhui.equals("img") || houZhui.equals("jpg")){f.setStyle("是");}else{f.setStyle("否");}f.setImg(path1+newName);f.setDownCounts("0");f.setDownTime(new SimpleDateFormat("yyMMddHHmmss").format(new Date()));com.xiao.entity.User user = (com.xiao.entity.User) request.getAttribute("user");f.setUid(user.getId());filempl.addFiles(f);return "redirect:/selectFiles";}

文件下载

在这里插入图片描述

代码如下:

    @GetMapping("/download")public void downloadFile(@Param("id")String id , HttpServletResponse response) throws IOException {File file = filempl.queryFile(id);// 获取要下载文件的 urlString paths = ResourceUtils.getURL("classpath:").getPath()+"/static/test";//获取文件输入流FileInputStream is = new FileInputStream(new java.io.File(paths,file.getNewName()));// 附件下载response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(file.getOldName(),"utf8"));// 获取输出响应流ServletOutputStream os = response.getOutputStream();IOUtils.copy(is,os);// 关闭流IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);//        问题二:不需要返回,因为是下载,不存在页面转跳问题
//        return "forward:/selectFiles";

文件删除

在这里插入图片描述

代码如下:

    @GetMapping("/delFile")public String delFile(@Param("id")String id) throws IOException {// 根据id查找到当前的User对象File file = filempl.queryFile(id);String id1 =file.getNewName();// 如果文件存在,则删除文件boolean del = Files.deleteIfExists(Paths.get("D:\\javaPorject\\thirdTest\\target\\classes\\static\\test\\"+id1));// mapper 删除文件filempl.delFiles(id);return "forward:/selectFiles";}

文件在线打开

在这里插入图片描述

仅仅多了一个 “ inline; ”,就变成了在线打开。

在写练习的时候,发现了一些小小的问题,已经在 上述代码中体现。

① 代码路径碰到中文的时候,会有乱码,需要转换(内容中已解决)

② 在下载文件的时候,无需转跳问题(内容中已解决)

http://www.lryc.cn/news/443988.html

相关文章:

  • 【Kotlin 与 Java 互操作】Java中调用带有默认值的Kotlin函数(十四)
  • 点赞系统实现
  • c++进阶学习-----继承
  • C++学习笔记(37)
  • Redis发布和订阅
  • 计算机毕设设计推荐-基于python+Djanog大数据的电影数据可视化分析
  • dhtmlxGantt 甘特图 一行展示多条任务类型
  • COLORmap
  • 手机在网状态查询接口如何用Java进行调用?
  • mysql性能优化- 数据库配置优化
  • (算法)大数的进制转换
  • 演示jvm锁存在的问题
  • Android SharedPreference详解
  • 论文阅读 | 可证安全隐写(网络空间安全科学学报 2023)
  • Arthas jvm(查看当前JVM的信息)
  • 【c++】介绍
  • JavaScript typeof与instanceof的区别
  • C++11 可变的模板参数
  • 手机在网状态查询接口如何用PHP进行调用?
  • MATLAB中多张fig图合并为一个图
  • Java启动Tomcat: Can‘t load IA 32-bit .dll on a AMD 64-bit platform报错问题解决
  • 基于微信小程序的家教信息管理系统的设计与实现(论文+源码)_kaic
  • 【Android】BottomSheet基本用法总结(BottomSheetDialog,BottomSheetDialogFragment)
  • Linux下实现ls命令的功能
  • 【中国留学网-注册_登录安全分析报告】
  • jvm中的程序计数器、虚拟机栈和本地方法栈
  • 安卓数据存储——SharedPreferences
  • 【计算机网络篇】数据链路层 功能|组帧|流量控制与可靠传输机制
  • Apache CVE-2021-41773漏洞复现
  • 带线无人机现身俄罗斯抗干扰技术详解