2009-07-16 61 views
1

我知道這有點寬泛,但是這裏的情況:Java輸出一個文件到屏幕

我正在使用JSP和Java。我的服務器上有一個文件。我想添加一個鏈接到屏幕上,點擊後,會打開文件供用戶查看。該文件可以出現在Web瀏覽器的窗口中,或者彈出打開文件所需的程序(類似於當您使用iText輸出到屏幕,Adobe打開時顯示該文件)。我知道我的輸出流,但是我怎樣才能將文件寫入輸出流?我讀過的大部分內容只處理文本文件,但我可能也在處理圖像文件等。

任何幫助表示讚賞! 謝謝!

回答

1

下面是關於如何實現一個簡單的實現:

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(); 
} 
1

您需要創建一個「下載」servlet,將該文件寫入響應輸出流,並使用正確的MIME類型。您無法從.jsp文件中可靠地執行此操作。

我們通常使用「下載servlet」來執行此操作,我們將servlet映射設置爲/ downloads,然後附加路徑信息以標識要提供的資產。 servlet驗證請求是否有效,設置MIME頭,然後將文件傳送到輸出流。這很簡單,但在做這件事時保持J2EE javadocs的方便。

2

您需要將某些字段添加到響應中。對於文本/ CSV,你會怎麼做:

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

這裏有sun關於它的論壇。