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

时间:2014-05-26 09:41:33

标签: xpages

点击xpage中的链接后,我是否有可能打开或保存现有文件?

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

我的应用程序适用于Lotus Client和Web。

感谢您的时间

3 个答案:

答案 0 :(得分:1)

我假设(根据您的评论)您正在寻找一种方法在某处存储某个特定的Excel文件,并允许用户通过链接访问此文件。

你可以这样做:

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

  2. 在XPage中创建一个指向该文件的链接,只需输入名称(例如" sample.xls")

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您只想使文件正常可用,Knut的答案就是您想要的:将文件存储为数据库中的文件资源并链接到XPage上。我会添加一个调整:在“value”属性中使用“/”启动URL,例如

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

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

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

根据文件的存储方式,解决方案要么相当容易,要么不是 - 不可能 - 但又有点痛苦:

  1. 如果它是附加到文档的文件,我相信正常控件会生成指向正常添加此标题的附件下载服务的链接。
  2. 如果不是(例如它是文件资源),那么Frantisek的建议就会发挥作用:你必须编写自己的垫片XAgent或servlet来编写这个头,然后吐出文件的内容。
  3. 虽然后者是可行的,但这是一种痛苦,因此我建议尽可能地将你的附件与正常文件纠缠在一起。例如,如果它附加到隐藏视图中的文档,则可以执行以下操作:

    <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>