使用Spring Boot提供gzip压缩文件

时间:2016-01-20 16:51:04

标签: java spring

我正在尝试使用Spring Boot REST提供gzip压缩日志文件。 文件已经被gzip压缩,我不需要gzip它们。 浏览器应该解压缩它们并显示纯文本。 基于我用Google搜索的信息,我需要两件事才能让它发挥作用:

  • 在请求标头中设置以下内容:'Accept-Encoding': 'gzip'
  • 在回复标题中设置以下内容:'Content-Encoding': 'gzip'

请求没问题:

enter image description here

响应不是 - 缺少Content-Encoding标头: enter image description here

这是我的Java代码:

@RequestMapping(value = "/download",
    method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> download(HttpServletRequest request, HttpServletResponse response) {
    log.debug("REST request to get the filesystem resource");

    // hardcoded for testing purpose
    File f = new File("C:/file.log.gz");
    InputStream inputStream = null;
    InputStreamResource inputStreamResource = null;
    HttpHeaders headers = null;
    try {
        inputStream = new FileInputStream(f);
        inputStreamResource = new InputStreamResource(inputStream);

        headers = new HttpHeaders();
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");
        headers.add("Content-Encoding", "gzip");

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

    return ResponseEntity
        .ok()
        .headers(headers)
        .contentType(MediaType.parseMediaType("text/plain"))
        .body(inputStreamResource);
}

Spring是否从响应中删除了这个特定的标题?

1 个答案:

答案 0 :(得分:0)

我刚刚发现它确实在工作:)。之前我使用BrowserSync进行测试,出于某种原因它不能与BrowserSync一起使用。