java将文件转成流文件返回给前端

打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

环境:jdk1.8,springboot2.5.3,项目端口号:9100
1.待转换的文件

一、路径


二、文件内容


2.controller中代码

  1. package com.example.pdf.controller;
  2. import com.example.pdf.service.GetFileStreamService;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import javax.annotation.Resource;
  7. import javax.servlet.http.HttpServletResponse;
  8. /**
  9. * @author
  10. * @date 2024/3/29 16:28
  11. * @describe
  12. */
  13. @RestController
  14. @RequestMapping(value = "test")
  15. public class GetFileStreamController {
  16.     @Resource
  17.     private GetFileStreamService getFileStreamService;
  18.        
  19.         /**
  20.      * 获取文件流
  21.      */
  22.     @GetMapping("getFileStream")
  23.     public void getFileStream(HttpServletResponse response) {
  24.         getFileStreamService.getFileStream(response);
  25.     }
  26. }
复制代码
3.service中代码

  1. package com.example.pdf.service;
  2. import javax.servlet.http.HttpServletResponse;
  3. /**
  4. * @author
  5. * @date 2024/3/29 16:30
  6. * @describe
  7. */
  8. public interface GetFileStreamService {
  9.     /**
  10.      * 获取文件流
  11.      * @param response
  12.      */
  13.     void getFileStream(HttpServletResponse response);
  14. }
复制代码
4.实现类代码

  1. package com.example.pdf.service.impl;
  2. import com.example.pdf.service.GetFileStreamService;
  3. import org.springframework.stereotype.Service;
  4. import javax.servlet.http.HttpServletResponse;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.OutputStream;
  8. /**
  9. * @author
  10. * @date 2024/3/29 16:31
  11. * @describe
  12. */
  13. @Service
  14. public class GetFileStreamServiceImpl implements GetFileStreamService {
  15.     /**
  16.      * 获取文件流
  17.      */
  18.     @Override
  19.     public void getFileStream(HttpServletResponse response) {
  20.         // 指定文件路径,获取file文件
  21.         File file = new File("E:\\Desktop\\temps\\test.pdf");
  22.         try {
  23.             // 将文件转为文件输入流
  24.             FileInputStream fileInputStream = new FileInputStream(file);
  25.             // 获取响应的输出流
  26.             OutputStream outputStream = response.getOutputStream();
  27.             response.reset();
  28.             response.setContentType("application/octet-stream");
  29.             response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
  30.             response.setHeader("Content-Length", "" + (file.length()));
  31.             // 将文件转成字节数组,再将数组写入响应的输出流
  32.             byte[] buffer = new byte[1024];
  33.             int bytesRead = -1;
  34.             while ((bytesRead = fileInputStream.read(buffer)) != -1) {
  35.                 outputStream.write(buffer, 0, bytesRead);
  36.             }
  37.             // 刷新输出流
  38.             outputStream.flush();
  39.             // 关闭流
  40.             fileInputStream.close();
  41.             outputStream.close();
  42.         } catch (Exception e) {
  43.             e.printStackTrace();
  44.         }
  45.     }
  46. }
复制代码
5.postman中访问效果示例


6.欣赏器中访问效果示例


注意1:如果想直接展示数据那么就在service层屏蔽如下代码,要下载则使用以下代码
  1.                         response.reset();
  2.             response.setContentType("application/octet-stream");
  3.             response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
  4.             response.setHeader("Content-Length", "" + (file.length()));
复制代码
注意2:在controller层返回要设置为void,如果是自界说的Result大概会使数据下载不完整。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表