xpages:附件如何在网页中工作

xpages: how do attachments work in a web page

这里的上下文是,在 CMS 类型的应用程序中,创建内容的用户喜欢重现 Notes 在文本中任何位置添加附件的方式,而不仅仅是页面底部的附件列表。创建页面时,他们希望能够使用 link 和 img 标签立即为附件创建 links,而不是先保存文档然后再次编辑它。

我找到了 YouAtNotes HTML5 多文件上传控件,它允许用户在文档实际保存之前上传附件。保存文档之前上传的附件 URL 是:

http://myserver/myDB.nsf/xsp/.ibmmodres/persistence/DominoDoc-NEW_569-Body/indifference.jpg

我在 CKEditor 中使用此 URL 创建图像,它看起来不错:图像显示在编辑器中并具有此 URL:

/myDB.nsf/xsp/.ibmmodres/persistence/DominoDoc-NEW_569-Body/insanity.jpg

然后我保存文档,它看起来仍然不错。图像正在显示,URL 仍然是:

http://myserver/mydb.nsf/xsp/.ibmmodres/persistence/DominoDoc-NEW_569-Body/indifference.jpg

我关闭浏览器,再次打开页面,现在我看到我的图片没有显示,但 URL 仍然是:

/Belair/xBiblio.nsf/xsp/.ibmmodres/persistence/DominoDoc-NEW_569-Body/indifference.jpg

但是如果我查看下载控件使用的 URL,这就是它具有的内容:

http://myserver/mydb.nsf/xsp/.ibmmodres/domino/OpenAttachment/belair/xbiblio.nsf/E4E384094564EE9E85257F33005953AE/Body/indifference.jpg

为什么改变了?

是否有关于整个附件过程如何工作的文档,以便我可以理解它并向用户提供适当的指示,以便他们可以创建有效的 links。

我们的发布代码也有一个特殊性:我们需要保留已发布文档的 UNID,因此使用 UNID 制作的 links 仍然有效。这是一款内容丰富的应用程序,还有许多外部应用程序 link。所以当我们发布的时候,我们实际上是把草稿的所有内容都复制到已经发布的文档中,所以 UNID 和草稿文档是不同的,因此我们有附件 links 的问题。但那是另一回事...

URL“/Belair/xBiblio.nsf/xsp/.ibmmodres/persistence/DominoDoc-NEW_569-Body/indifference.jpg”与文档保存前的临时位置有关。这是标准功能,因为

  1. 对于 SSJS / Java 将文件保存到 NSF 中,必须在提交之前将其上传到服务器。
  2. 用户尚未选择保存文件,因此不应将其添加到 NSF。
  3. 文档还没有保存,所以即使它应该保存到 NSF,也没有文档可以保存它。

URL 的组成部分是:

  • "/Belair/xBiblio.nsf",它最终需要提交到的数据库的 URL。
  • "xsp/.ibmmodres/persistence",根据NSF的xsp.properties,一个URL对应于存储此NSF临时文件的物理文件夹位置;如果 NSF 的 xsp.properties 中没有定义任何内容,则使用服务器的 xsp.properties;如果此处未定义任何内容,则使用默认位置。
  • "DominoDoc-NEW_569",对新的、未保存的 dominoDocument 数据源的临时引用。如果您关闭浏览器并 re-open 它,您将得到一个不同的临时 dominoDocument 数据源引用,所以我不希望图像出现。否则,不同的用户可能会得到彼此的附件。
  • "-Body",文件需要保存到的字段。
  • "/indifference.jpg" 文件名。

一旦文档被保存,文件被存储到相关文档的正文字段中,并且文件系统被清理。 URL 必须更改,否则附件将无法在其他副本上使用,因为只有数据库被复制,并且无法由 DAOS 管理。

新的URL“http://myserver/mydb.nsf/xsp/.ibmmodres/domino/OpenAttachment/belair/xbiblio.nsf/E4E384094564EE9E85257F33005953AE/Body/indifference.jpg”对应于:

  • "myserver/mydb.nsf/xsp/.ibmmodres/domino/OpenAttachment",shorthandURL打开相关附件
  • "/belair/xbiblio.nsf/E4E384094564EE9E85257F33005953AE",附件存放的文档位置。
  • "/Body",字段名。
  • "/indifference.jpg", 附件名称(该字段当然可以有多个附件)。

以上信息基于 XPages 便携式命令指南(用于更改默认临时位置的 xsp.properties 设置)和 Mastering XPages 2nd Edition 中记录的内容。

我不确定 YouAtNotes 上传器做了什么,所以我不能说它是否应该在保存时更改 URL。但在较新版本的 Domino 中,无需完全刷新即可上传附件,这可能是一种替代方法。

当您复制文档时,如果您存储的 HTML 通过 URL 引用图像,包括 UNID,您将需要修改这些引用。

如果您想保留 UNID,请记住它们是 read-write - 您可以设置它们,也可以获取它们。但是,请记住,如果将 URL 更改为与现有文档相同的 URL,将会遇到问题。请记住,这也是 XPage,因此通过 XPage 应用程序访问的数据不必位于同一数据库中。