XPages:如何创建从文件系统下载文件的链接

时间:2013-12-12 14:01:01

标签: html hyperlink xpages lotus-domino

我在一个文件夹中有一个pdf文件,我想从xpage下载它。

通常这只是像这样的HTML:

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

我测试了它在一个简单的html文件中使用这一行。 在我的Xpage中,我创建了一个计算字段(HTML显示),并添加了&lt; a&gt;作为价值。我在悬停时看到了正确的链接,但点击后没有任何反应。有什么问题?

日Thnx

3 个答案:

答案 0 :(得分:1)

我最近通过编写下载“servlet”作为无头XPage解决了这类问题。对于链接添加onclick事件:

sessionScope.put("filepath", file);
context.redirectToPage("/_download.xsp") 

_ 下载页面有 beforeRenderResponse 事件facesContext.responseComplete(),而 afterRenderResponse 调用读取文件并写入文件的java代码输出流。像这样:

if (sessionScope.containsKey("filepath")){
    FileDownload.sendFile(sessionScope.filepath);
}

java class:

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(),但它没有效果。

答案 1 :(得分:0)

文件系统通常不在Domino中公开。 HTML根目录是domino data / domino / html,您的文件需要位于下面的文件夹中。文件夹名称在名称中不能包含.nsf。您可以在Internet站点中配置该文件夹。

答案 2 :(得分:0)

像你这样的缝合起来

10.1.0.2是一个ipadress,它将引用一个网络服务器然后你应该添加http:infront的url而不是file:

如果要访问计算机上的本地文件,请写入文件:// c:\ path \ file.ext

但浏览器中存在一些访问服务器共享上文件的限制。

检查此链接 http://kb.mozillazine.org/Links_to_local_pages_do_not_work