【问题标题】:Spring - display PDF-file in browser instead of downloadingSpring - 在浏览器中显示 PDF 文件而不是下载
【发布时间】:2016-02-18 11:40:15
【问题描述】:

我正在尝试使用 spring 在我的浏览器中显示 pdf。 我的问题是浏览器下载文件而不是显示它。 这是我的代码:

@RequestMapping(value="/getpdf1", method=RequestMethod.GET)
public ResponseEntity<byte[]> getPDF1() {


    HttpHeaders headers = new HttpHeaders();

    headers.setContentType(MediaType.parseMediaType("application/pdf"));
    String filename = "pdf1.pdf";

    headers.add("content-disposition", "inline;filename=" + filename);

    headers.setContentDispositionFormData(filename, filename);
    headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
    ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(pdf1Bytes, headers, HttpStatus.OK);
    return response;
}

期待您的回答! 谢谢

【问题讨论】:

  • 它不适合我。
  • 我可以在浏览器上渲染.csv 文件吗?需要设置什么?
  • 尝试替换“headers.setContentType(MediaType.parseMediaType("application/pdf"));”与“response.setContentType("text/plain; charset=utf-8");"

标签: spring pdf browser http-headers


【解决方案1】:

Content-Disposition 用于控制下载或在浏览器中查看

在浏览器中查看

headers.add("Content-Disposition", "inline; filename=" + "example.pdf");

下载

headers.add("Content-Disposition", "attachment; filename=" + "example.pdf");

【讨论】:

    【解决方案2】:

    你快完成了。只需删除

    headers.setContentDispositionFormData(filename, filename);
    

    来自您的代码块。在将 multipart/form-data 发布到服务器时应该使用它。

    【讨论】:

    • 我试过这样,但仍然是下载而不是在浏览器中查看。这里的确切解决方案是什么。
    • 解决方案:来自 OP 问题的代码块,但没有 setContentDispositionFormData。也许你应该发布一个新问题。
    • 离题了,但是你知道如何在新标签页中打开这个 pdf 查看器时删除弹簧叶图标(网络浏览器图标)吗?
    • 将您的网站图标放在您网站的根目录下,例如localhost/favicon.ico。另请参阅w3.org/2005/10/howto-favicon
    【解决方案3】:

    以下代码片段将帮助您在浏览器上显示文件


    @GetMapping(value = "/terms-conditions")
        public ResponseEntity<InputStreamResource> getTermsConditions() {
    
            String filePath = "/path/to/file/";
            String fileName = "fileName.pdf";
            File file = new File(filePath+fileName);
            HttpHeaders headers = new HttpHeaders();      
            headers.add("content-disposition", "inline;filename=" +fileName);
            
            InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
    
            return ResponseEntity.ok()
                    .headers(headers)
                    .contentLength(file.length())
                    .contentType(MediaType.parseMediaType("application/pdf"))
                    .body(resource);
        }
    

    【讨论】:

    • 有没有办法在编辑时创建文件的实时预览?
    【解决方案4】:

    它正在工作,你应该尝试这样做,通过文件名获取并在浏览器中打开

      @GetMapping(value = "/pdf/{filename:.+}") public ResponseEntity<InputStreamResource> getTermsConditions(@PathVariable String filename) {
    
        File file = storageService.load(filename).getFile();
     
        HttpHeaders headers = new HttpHeaders();      
        headers.add("content-disposition", "inline;filename=" +fileName);
        
        InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
    
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(file.length())
                .contentType(MediaType.parseMediaType("application/pdf"))
                .body(resource);
    }
    

    【讨论】:

      【解决方案5】:

      见以下代码:

      headers.setContentDisposition(ContentDisposition.inline().filename("example.pdf").build());
      

      【讨论】:

        【解决方案6】:

        在浏览器中查看(使用内联):

        header.add(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=" + pdfFile.getName());
        

        供下载(使用附件):

        header.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + pdfFile.getName());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-07
          • 2016-07-31
          • 1970-01-01
          • 1970-01-01
          • 2017-10-28
          • 2016-09-11
          • 2012-01-18
          相关资源
          最近更新 更多