spring boot中文件下载方法

Posted 非帆丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot中文件下载方法相关的知识,希望对你有一定的参考价值。

 

1、返回文件作为响应体,使用ResponseEntity类:

@GetMapping("/downloadFile")
public ResponseEntity<byte[]> downloadFile() throws IOException 
    // 读取文件内容到字节数组
    byte[] fileContent = Files.readAllBytes(Paths.get("path/to/file.txt"));

    // 设置响应头,指定文件名
    HttpHeaders headers = new HttpHeaders();
    headers.setContentDisposition(ContentDisposition.attachment().filename("file.txt").build());

    // 返回文件内容和响应头
    return ResponseEntity.ok().headers(headers).body(fileContent);

 2、返回文件作为响应体,使用StreamingResponseBody接口:

@GetMapping("/downloadFile")
public void downloadFile(HttpServletResponse response) throws IOException 
    // 设置响应头,指定文件名
    response.setHeader("Content-Disposition", "attachment; filename=file.txt");

    // 获取文件输入流
    InputStream inputStream = new FileInputStream("path/to/file.txt");

    // 创建StreamingResponseBody对象,将文件内容写入响应输出流
    StreamingResponseBody responseBody = outputStream -> 
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) 
            outputStream.write(buffer, 0, bytesRead);
        
        inputStream.close();
    ;

    // 返回StreamingResponseBody对象
    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
    responseBody.writeTo(response.getOutputStream());

 3、返回文件下载,使用ResponseEntity类:

@GetMapping("/downloadFile")
public ResponseEntity<Resource> downloadFile() 
    // 创建Resource对象,表示文件路径
    Resource fileResource = new FileSystemResource("path/to/file.txt");

    // 设置响应头,指定文件名
    HttpHeaders headers = new HttpHeaders();
    headers.setContentDisposition(ContentDisposition.attachment().filename("file.txt").build());

    // 返回文件资源和响应头
    return ResponseEntity.ok().headers(headers).body(fileResource);

 4、返回文件流,使用InputStreamResource类:

@GetMapping("/downloadFile")
public ResponseEntity<InputStreamResource> downloadFile() throws FileNotFoundException 
    // 创建文件输入流
    FileInputStream fileInputStream = new FileInputStream("path/to/file.txt");

    // 创建InputStreamResource对象,封装文件输入流
    InputStreamResource resource = new InputStreamResource(fileInputStream);

    // 设置响应头,指定文件名
    HttpHeaders headers = new HttpHeaders();
    headers.setContentDisposition(ContentDisposition.attachment().filename("file.txt").build());

    // 返回InputStreamResource对象和响应头
    return ResponseEntity.ok().headers(headers).body(resource);

  

Spring boot Freemarker 获取ContextPath的方法

Spring boot Freemarker 获取ContextPath的两种方法:

1、自定义viewResolver,Spring boot中有一个viewResolver,这个和配置文件中的师徒解析器是一样的,但是spring boot不允许xml配置文件,所以可以写一个自定义的FreeMarker视图解析器。

public class MvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public FreeMarkerViewResolver freeMarkerViewResolver() {
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setPrefix("");
        resolver.setSuffix(".ftl");
        resolver.setContextType("text/html;charset=UTF-8");
        resolver.setRequestContextAttribute("rc");
        return resolver;        

     }
} 

然后在.ftl文件中通过${rc.contextPath}获取、

2、Spring boot自己提供的方法:内置方法。

${springMacroRequestContext.contextPath}

 

以上是关于spring boot中文件下载方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot Freemarker 获取ContextPath的方法

spring_boot打jar包及打包错误的解决方法

Spring Boot 项目配置的使用方法

spring-boot项目直接读取jar包内文件的最简单方法

Spring-boot之jQuery File Upload后台配置方法

关于spring boot启动监控端点的方法(spring-boot-starter-actuator)