我知道這有點寬泛,但是這裏的情況:Java輸出一個文件到屏幕
我正在使用JSP和Java。我的服務器上有一個文件。我想添加一個鏈接到屏幕上,點擊後,會打開文件供用戶查看。該文件可以出現在Web瀏覽器的窗口中,或者彈出打開文件所需的程序(類似於當您使用iText輸出到屏幕,Adobe打開時顯示該文件)。我知道我的輸出流,但是我怎樣才能將文件寫入輸出流?我讀過的大部分內容只處理文本文件,但我可能也在處理圖像文件等。
任何幫助表示讚賞! 謝謝!
我知道這有點寬泛,但是這裏的情況:Java輸出一個文件到屏幕
我正在使用JSP和Java。我的服務器上有一個文件。我想添加一個鏈接到屏幕上,點擊後,會打開文件供用戶查看。該文件可以出現在Web瀏覽器的窗口中,或者彈出打開文件所需的程序(類似於當您使用iText輸出到屏幕,Adobe打開時顯示該文件)。我知道我的輸出流,但是我怎樣才能將文件寫入輸出流?我讀過的大部分內容只處理文本文件,但我可能也在處理圖像文件等。
任何幫助表示讚賞! 謝謝!
下面是關於如何實現一個簡單的實現:
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();
}
您需要創建一個「下載」servlet,將該文件寫入響應輸出流,並使用正確的MIME類型。您無法從.jsp文件中可靠地執行此操作。
我們通常使用「下載servlet」來執行此操作,我們將servlet映射設置爲/ downloads,然後附加路徑信息以標識要提供的資產。 servlet驗證請求是否有效,設置MIME頭,然後將文件傳送到輸出流。這很簡單,但在做這件事時保持J2EE javadocs的方便。
您需要將某些字段添加到響應中。對於文本/ CSV,你會怎麼做:
response.setContentType("text/csv"); // set MIME type
response.setHeader("Content-Disposition", "attachment; filename=\"" strExportFileName "\"");
這裏有sun關於它的論壇。