我有一個pdf文件在一個文件夾中,我想從xpage下載它。XPages:如何創建鏈接從文件系統下載文件
通常這只是HTML這樣的:
<a href='file://10.1.0.2/folder1/myfile.pdf'>click and download</a>
我測試了一下它的工作原理用一個簡單的HTML文件,這條線。 在我的Xpage中,我創建了一個計算字段(HTML顯示),並且我添加了「>作爲值。我看到懸停的正確鏈接,但點擊沒有任何反應。問題是什麼?
Thnx
我有一個pdf文件在一個文件夾中,我想從xpage下載它。XPages:如何創建鏈接從文件系統下載文件
通常這只是HTML這樣的:
<a href='file://10.1.0.2/folder1/myfile.pdf'>click and download</a>
我測試了一下它的工作原理用一個簡單的HTML文件,這條線。 在我的Xpage中,我創建了一個計算字段(HTML顯示),並且我添加了「>作爲值。我看到懸停的正確鏈接,但點擊沒有任何反應。問題是什麼?
Thnx
我最近寫一個下載「小服務程序」作爲一個無頭的XPage解決這類問題。對於鏈接添加onclick事件:
sessionScope.put("filepath", file);
context.redirectToPage("/_download.xsp")
_ 下載頁面有beforeRenderResponse事件facesContext.responseComplete()
和afterRenderResponse調用Java代碼的讀取文件並寫入到輸出流。事情是這樣的:
if (sessionScope.containsKey("filepath")){
FileDownload.sendFile(sessionScope.filepath);
}
java類:
public class FileDownload {
public static void sendFile(String filepath) {
File file = new File(filepath);
if (file.exists()) {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse response = (HttpServletResponse) ec.getResponse();
response.setContentType(MIME(filepath)); // figure out the type from extension or else
OutputStream out;
try {
// for the download dialog
response.setHeader("Content-disposition",
"attachment; filename*=utf-8''" + java.net.URLEncoder.encode(file.getName(), "UTF-8").replace("+", "%20"));
out = response.getOutputStream();
FileInputStream in = new FileInputStream(file);
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.flush();
} catch (IOException e) {
}
}
}
}
不幸的是非常大的文件(1GB左右)就變得緩慢,也需要內存大約兩倍的文件大小,但我不知道我可以在這裏優化什麼。我試圖在循環中調用out.flush()
,但它沒有效果。
偉大的解決方案!我唯一的修改是,我將java類添加爲託管bean。我認爲可以不用這種方式重定向到_download.xsp頁面,只需在onclick事件中調用託管bean(如果這樣做,也不需要會話變量)。我唯一的問題是,我的文件名是在希臘文,也有空格,我想我必須改變這裏的東西:response.setHeader(...) –
希臘應該沒有任何問題 - 它使用UTF-8編碼。我用它與西里爾文和日文字符沒有問題。 –
文件系統通常不在Domino中公開。 HTML根目錄是domino data/domino/html,您的文件需要位於下面的文件夾中。文件夾名稱不能在名稱中包含.nsf。您可以在互聯網網站中配置文件夾。
接縫像你混的事情了
10.1.0.2是ipadress,這將是指一個Web服務器,那麼你應該添加http:
如果你想訪問:URL的文件,而不是盈方您的計算機上寫文件的本地文件:// C:\路徑\ file.ext
但在瀏覽器的一些限制訪問服務器上的共享文件。
檢查此鏈接 http://kb.mozillazine.org/Links_to_local_pages_do_not_work
您應該顯示實際生成的HTML代碼 –
什麼瀏覽器?除了@Pekka웃的評論,看看狀態欄,瀏覽器顯示的鏈接。 –
根據接受的答案,它看起來像你說的HTML文件中的相同鏈接不起作用。 –