我在一个文件夹中有一个pdf文件,我想从xpage下载它。
通常这只是像这样的HTML:
<a href='file://10.1.0.2/folder1/myfile.pdf'>click and download</a>
我测试了它在一个简单的html文件中使用这一行。 在我的Xpage中,我创建了一个计算字段(HTML显示),并添加了&lt; a&gt;作为价值。我在悬停时看到了正确的链接,但点击后没有任何反应。有什么问题?
日Thnx
答案 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