【文件处理】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);
      }


   }
相关推荐
颜酱4 小时前
07 | 把字段与指标同步到 Qdrant(生成阶段)
前端·人工智能·后端
Larcher5 小时前
从“加载模型”界面到端侧推理:拆解一个 React + WebGPU 大模型 Demo
javascript·后端
极客先躯5 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq5 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
Larcher5 小时前
从状态快照到惰性初始化:读懂 React useState 的三个关键场景
javascript·人工智能·后端
lazy H5 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
wang09076 小时前
自己动手写一个spring之aop_1
java·后端·spring
神奇小汤圆6 小时前
IDEA 运行报 Command line is too long?别慌,两招搞定(附原理)
后端
SelectDB6 小时前
Apache Doris 4.1 全面增强 Iceberg:支持 UPDATE、MERGE INTO 与 Iceberg V3
后端
国科安芯6 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v