【文件处理】spring boot 文件处理

接收文件

java 复制代码
   @PostMapping
   public result<String> add(MultipartFile file) throws IOException {
 
     // 得到目标文件夹
       File directory = new File("file");
     //如果文件夹不存在就创建
      if(!directory.exists()){
            directory.mkdirs();
        }
     //文件名称
       String fileName = file.getOriginalFilename();
     //得到文件的存放路径  ---directory.getCanonicalPath() 文件夹全路径 --- File.separator:分隔符
       String filePath = directory.getCanonicalPath() + File.separator + fileName;  

     
      // 创建新文件对象,指定文件路径为新路径
      File desc = new File(filePath);
    
      // 将前端发过来的文件输送给新文件 完成存入
      file.transferTo(desc);
      return result.success("success");
   }

发送文件

java 复制代码
  @GetMapping("/{url}")
   public void pdf(@PathVariable String url, HttpServletResponse response) throws IOException {
    
     //文件所在文件夹
      File directory = new File("file");
  
     //文件路径
      String filePath = directory.getCanonicalPath() + File.separator + url;
     
    
      try {
         fileName = URLEncoder.encode(fileName, "UTF-8");
        //StringBuilder().append拼接字符串性能更高
         String header = new StringBuilder().append("attachment;filename=")
                 .append(fileName).toString();
        //响应的内容类型为"application/octet-stream",这是一种通用的二进制数据格式。
         response.setContentType("application/octet-stream");
        //      content-type 指示响应内容的格式
//
//      content-disposition 指示如何处理响应内容。
//
//      一般有两种方式:
//
//      inline:直接在页面显示
//      attchment:以附件形式下载
         response.addHeader("Content-disposition", header);
        //响应内容不会被压缩传输,而是直接发送给客户端。
         response.addHeader("Transfer-Encoding", null);
        //表示在响应完成后,连接将被立即关闭,不再进行后续的数据交换。
         response.addHeader("connection", "close");
      } catch (UnsupportedEncodingException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
      }
   //得到文件
      File file = new File(filePath);
      FileInputStream in = null;
      OutputStream out = null;
      try {
        //读取文件
         in = new FileInputStream(file1);
         out = response.getOutputStream();
         IOUtils.copy(in, out);
         out.flush();
      } catch (FileNotFoundException e) {
         e.printStackTrace();

      } catch (IOException e) {
         e.printStackTrace();

      } finally {
         IOUtils.closeQuietly(out);
         IOUtils.closeQuietly(in);
      }


   }
相关推荐
爱跑步的程序员~1 分钟前
SpringBoot集成SpringAI与Ollama本地大模型
java·后端·spring·ai·llama·springai
冼紫菜5 分钟前
Claude整理的Dify平台学习教程资源
后端·学习·ai·llm·agent·dify
Grandpa_Rick8 分钟前
Join Module: Iteration #6 Nested Join
java
Y‍waiX‍‍‮‪‎⁠‌‫‎‌‫‬12 分钟前
CentOS7安装多版本jdk并切换jdk版本
java·jdk·centos
疯狂敲代码的老刘15 分钟前
MyBatis Generator GUI 下载安装教程 可视化MyBatis代码生成
java·mybatis·mybatis-ui
追随者永远是胜利者33 分钟前
(LeetCode-Hot100)23. 合并 K 个升序链表
java·算法·leetcode·链表·go
Moshow郑锴1 小时前
Java SpringBoot 疑难 Bug 排查思路解析:从“语法正确”到“行为相符”
java·spring boot·bug
APIshop1 小时前
淘宝商品评论接口实战解析:从抓包到数据抓取全链路技术指南
java·python
百锦再1 小时前
线程安全的单例模式全方位解读:从原理到最佳实践
java·javascript·安全·spring·单例模式·kafka·tomcat
百锦再2 小时前
Java synchronized关键字详解:从入门到原理(两课时)
java·开发语言·struts·spring·kafka·tomcat·maven