xpages如何从链接打开/保存文件

Posted

技术标签:

【中文标题】xpages如何从链接打开/保存文件【英文标题】:xpages how to open/save a file from a link 【发布时间】:2014-07-15 01:20:15 【问题描述】:

在单击 xpage 中的链接后,我是否有机会打开或保存现有文件?

我的场景:一个指向附件的链接(一个 excel 文件),因此所有用户在单击该链接时,都可以打开或保存该文件。

我的应用程序可以在 Lotus Client 和 Web 上运行。

感谢您的宝贵时间

【问题讨论】:

我编辑了我的问题,使其更清楚。 我也看过wissel.net/blog/d6plinks/SHWL-86QKNM,但我不知道如何针对我的场景进行修改,如何将文件附加到富文本中 当您说打开/保存时,您的意思是:打开、编辑然后保存回同一位置? 只访问文件:打开它,如果用户可以打开文件,他们当然可以从文件属性中保存它。在经典笔记中,我通过以下方式创建它:从大纲中,一个大纲条目将您重定向到一个页面,该页面包含该文件作为页面上的附件。然后用户可以通过“双击”打开它。 所以我文章的哪一部分不清楚。它描述了如何创建指向附件的链接。当您单击此类链接时,浏览器会处理该文件,并根据配置自动打开或提供保存/下载。什么不适合你? 【参考方案1】:

您需要设置正确的内容类型。对于现有文件,您需要创建自己的服务 (XAgent) 来更改它。或者您可以尝试set it for the link。 请记住,与内容类型相关的操作是在浏览器中配置的 - 所以每个用户都有自己的。

【讨论】:

您能给我一个通过 XAgent 更改文件的代码示例吗?另外,该文件必须作为资源导入到 .nsf 中吗?【参考方案2】:

我假设(来自您的 cmets)您正在寻找一种方法来将某个 Excel 文件存储在某处并允许用户通过链接访问该文件。

您可以通过这种方式实现:

    将您的 Excel 文件存储在数据库中的Resources / Files(例如“sample.xls”)

    在您的 XPage 中创建一个指向该文件的链接,仅使用名称(例如“sample.xls”)

    <xp:link escape="true" value="sample.xls">Excel sample file</xp:link>

用户可以在浏览器或 XPiNC 点击链接打开或下载此文件。

【讨论】:

最初,由于文件名的原因,它不起作用:我的名称中有空格...现在我更改了它的名称,并且它起作用了。谢谢!【参考方案3】:

如果您只是想让文件正常可用,Knut 的答案就是您想要什么:将文件作为文件资源存储在数据库中并在 XPage 上链接到它。不过,我会添加一项调整:在“value”属性中的 URL 以“/”开头,例如

<xp:link value="/sample.xls" text="Excel sample file"/>

这样做的原因是为了确保生成的链接始终与 NSF 相关,而不是 XPage - 没有它,如果您使用“/someView/someDocKey”之类的链接打开 XPage(在表单中使用 display-XPage-instead)或者如果您碰巧在 XPage 之后包含额外的路径信息(例如“/foo.nsf/somePage.xsp/some/path/info”)。

但是如果你的意思是你想让浏览器显示保存文件对话框而不是任何正常的行为(例如 IE 在窗口中打开 Excel 文件),解决方案的核心是 Content-Disposition标题。如果此标头设置为告诉浏览器该文件是“附件”,则浏览器将提示用户(或执行其正常的文件下载例程)而不是内联打开。

根据文件的存储方式,解决方案要么相当简单,要么不是不可能,而是有点痛苦:

    如果是附加到文档的文件,我相信正常控件会生成指向正常添加此标头的附件下载服务的链接。 如果不是(例如,它是文件资源),那么 Frantisek 的建议就会发挥作用:您必须编写自己的 shim XAgent 或 servlet 来写入此标头,然后吐出文件的内容。

虽然后者是可行的,但它很痛苦,因此我建议尽可能将您的附件转换为普通文档。例如,如果它附加到隐藏视图中的文档,您可以执行以下操作:

<xp:panel>
    <xp:this.data>
        <xp:dominoDocument var="attachmentDoc" action="openDocument" ignoreRequestParams="true">
            <xp:this.documentId><![CDATA[$javascript:
                database.getView("SomeLookupView").getFirstEntry().getUniversalID()
            ]]></xp:this.documentId>
        </xp:dominoDocument>
    </xp:this.data>

    <xp:fileDownload value="#attachmentDoc.Body"/>
</xp:panel>

【讨论】:

以上是关于xpages如何从链接打开/保存文件的主要内容,如果未能解决你的问题,请参考以下文章

js如何保存文件

如何直接在网页中打开文件 不出现下载保存提示框!

如何批量保存网页

从同一页面下载第二个 .ics 文件会打开以前保存的文件

将文档文件保存为Word模板

如何在 XPages 中制作更好的文件上传控件