【问题标题】:Java output a file to the screenJava 将文件输出到屏幕
【发布时间】:2009-07-16 20:51:36
【问题描述】:

我知道这有点宽泛,但情况如下:

我正在使用 JSP 和 Java。我的服务器上有一个文件。我想在屏幕上添加一个链接,单击该链接会打开文件供用户查看。该文件可以出现在 Web 浏览器的窗口中,也可以弹出打开文件所需的程序(类似于使用 iText 输出到屏幕时,Adobe 打开以显示文件)。我已经知道我的输出流,但是如何将文件写入输出流?我读过的大部分内容只涉及文本文件,但我可能也在处理图像文件等。

感谢任何帮助! 谢谢!

【问题讨论】:

    标签: java file-io


    【解决方案1】:

    您需要在响应中添加某些字段。对于文本/csv,你会这样做:

     response.setContentType("text/csv"); // set MIME type 
     response.setHeader("Content-Disposition", "attachment; filename=\"" strExportFileName "\"");
    

    这是关于它的sun 论坛。

    【讨论】:

      【解决方案2】:

      这是一个关于如何实现它的简单实现:

      protected void doPost(final HttpServletRequest request,
              final HttpServletResponse response) throws ServletException,
              IOException {
      
          // extract filename from request
          // TODO use a whitelist to avoid [path-traversing][1]
          File file = new File(getFileName(request));
          InputStream input = new FileInputStream(file);
      
          response.setContentLength((int) file.length());
          // TODO map your file to the appropriate MIME
          response.setContentType(getMimeType(file));
      
          OutputStream output = response.getOutputStream();
          byte[] bytes = new byte[BUFFER_LENGTH];
          int read = 0;
          while (read != -1) {
              read = input.read(bytes, 0, BUFFER_LENGTH);
              if (read != -1) {
                  output.write(bytes, 0, read);
                  output.flush();
              }
          }
      
          input.close();
          output.close();
      }
      

      【讨论】:

        【解决方案3】:

        您需要创建一个“下载”servlet,它将文件以正确的 mime 类型写入响应输出流。您无法在 .jsp 文件中可靠地执行此操作。

        我们通常使用“下载 servlet”来执行此操作,我们将 servletmapping 设置为 /downloads,然后附加路径信息以识别要服务的资产。 servlet 验证请求是否有效,设置 mime 标头,然后将文件传递到输出流。这很简单,但在执行此操作时请随身携带 J2EE javadocs。

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 2011-04-18
          • 1970-01-01
          • 2012-12-21
          • 1970-01-01
          • 1970-01-01
          • 2014-09-21
          • 1970-01-01
          相关资源
          最近更新 更多