2013-12-12 167 views
0

我有一個pdf文件在一個文件夾中,我想從xpage下載它。XPages:如何創建鏈接從文件系統下載文件

通常這只是HTML這樣的:

<a href='file://10.1.0.2/folder1/myfile.pdf'>click and download</a> 

我測試了一下它的工作原理用一個簡單的HTML文件,這條線。 在我的Xpage中,我創建了一個計算字段(HTML顯示),並且我添加了「>作爲值。我看到懸停的正確鏈接,但點擊沒有任何反應。問題是什麼?

Thnx

+2

您應該顯示實際生成的HTML代碼 –

+0

什麼瀏覽器?除了@Pekka웃的評論,看看狀態欄,瀏覽器顯示的鏈接。 –

+0

根據接受的答案,它看起來像你說的HTML文件中的相同鏈接不起作用。 –

回答

1

我最近寫一個下載「小服務程序」作爲一個無頭的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(),但它沒有效果。

+0

偉大的解決方案!我唯一的修改是,我將java類添加爲託管bean。我認爲可以不用這種方式重定向到_download.xsp頁面,只需在onclick事件中調用託管bean(如果這樣做,也不需要會話變量)。我唯一的問題是,我的文件名是在希臘文,也有空格,我想我必須改變這裏的東西:response.setHeader(...) –

+0

希臘應該沒有任何問題 - 它使用UTF-8編碼。我用它與西里爾文和日文字符沒有問題。 –

0

文件系統通常不在Domino中公開。 HTML根目錄是domino data/domino/html,您的文件需要位於下面的文件夾中。文件夾名稱不能在名稱中包含.nsf。您可以在互聯網網站中配置文件夾。

0

接縫像你混的事情了

10.1.0.2是ipadress,這將是指一個Web服務器,那麼你應該添加http:

如果你想訪問:URL的文件,而不是盈方您的計算機上寫文件的本地文件:// C:\路徑\ file.ext

但在瀏覽器的一些限制訪問服務器上的共享文件。

檢查此鏈接 http://kb.mozillazine.org/Links_to_local_pages_do_not_work