【问题标题】:Spring MVC - Display a PDF file into web browserSpring MVC - 在 Web 浏览器中显示 PDF 文件
【发布时间】:2016-12-02 09:05:51
【问题描述】:

我正在尝试使用 spring MVC 在 Web 浏览器中显示 PDF 文件。

public void displayActiviteFiles (Activite activite, HttpServletResponse response) throws IOException {
    File file = new File(activite.getLienUploadUn());
    FileInputStream inputStream = new FileInputStream(file);
    IOUtils.copy(inputStream, response.getOutputStream());
    response.setHeader("Content-Disposition", "attachment; filename="+file.getName());
    response.setContentType("application/pdf");
    response.flushBuffer();
}

但我得到的是奇怪的字符而不是 pdf 内容。
我哪里错了?

【问题讨论】:

    标签: spring-mvc


    【解决方案1】:

    为了回答我的问题并在我的情况下帮助其他一些人,这是可行的:

    File file = new File(activite.getLienUploadUn());
    FileInputStream inputStream = new FileInputStream(file);
    byte[] buffer = new byte[8192];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1)
    {
          baos.write(buffer, 0, bytesRead);
    }
    response.setHeader("Content-Disposition","inline; filename=\""+file.getName()+"\"");
    response.setContentType("application/pdf");
    ServletOutputStream outputStream = response.getOutputStream();
    baos.writeTo(outputStream);
    outputStream.flush();
    

    【讨论】:

      【解决方案2】:

      您可以显示包含此代码。

      @GetMapping(value = "/pdf")
      public void showPdf(HttpServletResponse response) throws IOException {
          response.setContentType("application/pdf");
          InputStream inputStream = new FileInputStream(new File("/sample.pdf"));
          int nRead;
          while ((nRead = inputStream.read()) != -1) {
              response.getWriter().write(nRead);
          }
      } 
      

      【讨论】:

        【解决方案3】:

        如果这对任何人都很重要,那么这就是 spring boot 1.5.11 中 100% 可行的解决方案。尚未在手动 Spring MVC 项目上运行。也许通过一些小的调整,可以使它工作。

            @GetMapping(value = "/downloadFile")
            public StreamingResponseBody getSteamingFile(HttpServletResponse response) throws URISyntaxException {
        
                File file = new File(getClass().getClassLoader().getResource("templates/more/si.pdf").toURI());
        
                //viewing in web browser
                response.setContentType("application/pdf");
                //for downloading the file directly if viewing is not possible
                response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
        
                file = null;
        
                //put the directory architecture according to your target directory
                // generated during compilation in maven spring boot
                InputStream inputStream = getClass().getClassLoader().getResourceAsStream("templates/more/si.pdf");
        
                return outputStream -> {
                    int nRead;
                    byte[] data = new byte[1024];
                    while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
                        outputStream.write(data, 0, nRead);
                    }
                    inputStream.close();
                };
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-27
          • 2021-10-25
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多