存储上传图像的最佳实践

Best practice for storing uploaded images

在我的 XPages 应用程序中,用户可以上传图片。目前,每个图像都有缩略图,然后将缩略图存储为单个 NotesDocument 的附件。在浏览器中,缩略图由其备注附件 url“[UNID]/$FILE/[ATTACHMENTNAME]”引用。

对我来说,每个图像有 1 个文档似乎有点 "overkill",我想这也会对性能产生影响,例如,当很多图像文档在同一个数据库中时在为与其他文档相关的视图创建视图索引时。因此,我想问一下,如果您只想在 frontend/browser 中显示图像而不需要存储有关它们的任何其他信息,是否有更好的存储图像的方法。

我想将缩略图文件直接保存到文件系统上的文件夹中,然后使该文件夹可通过 http(s) 访问。然而,我不知道该怎么做。我也考虑过将拇指保存到 WebContent 文件夹,但我也不知道使用这种方法的缺点。有没有人有这方面的经验或可以为我的问题提供另一种解决方案?

我认为您无法将它们保存到 NSF 的 WebContent 文件夹中,这不是一个好主意。它会保存设计中的图像,但图像应该是数据。

您可以将它们保存到 \domino\html 下的文件夹中,但同样不推荐这样做。如果你想要集群,文件将只在一台服务器上;他们不会有任何安全措施,因此任何人都可以访问它们;如果有任何腐败,你将不得不恢复;保存它们可能需要更高的访问权限;管理员可能不愿意让您查看它们,因此支持会更加困难。

我推荐的解决方案是将它们存储在数据库中。它可以复制,Domino 可以相应地处理它。此外,您拥有所有开箱即用的相关安全性。在数据库/服务器上启用 DAOS 后,它们不会影响数据库的物理大小。

关键是他们是只上传图片还是图片 + 元数据或其他数据。例如。如果它是个人文档并且他们正在上传个人资料图片。如果是这种情况,我会将图像存储在那个 Person 文档中。因为无法为视图索引图像,所以它不会影响视图索引,因此问题消失了。

如果它们必须单独存储在一个文档中,而您不希望它与其他数据存储在同一个数据库中,请创建一个单独的数据库并将其存储在那里。无论是将其存储在单独的数据库中还是文件系统中,都需要存储它们之间的关系,因此没有理由避免这种方法。此外,您仍然可以拥有相同的安全性、使用 DAOS 等

此外,您可能会找到更多关于如何操作、如何排除故障等方面的支持,因为很少有应用程序或开发人员可能会在 Domino 运行时采用在文件系统上存储的方法专为在文档中存储附件而设计并具有悠久的历史(例如,自 15 年前我开始使用 Domino 以来一直存在的文档库模板)。

我创建了一个框架来执行此操作。对于上传 JPG 的图片,我拍摄图片并调整大小 2 次。我存储了原始的 "Large" 和 "Small" 版本。所以我实际上创建了 3 个数据库......原始的,大的和小的......虽然它看起来有点过分......它实际上非常干净而且我已经创建了 Java 类 来处理所有 3大小为一。所以你删除了一张照片……它们都被删除了。我强烈建议每个文档 1 个附件。

我还没有得到解释它的视频。但如果您想深入研究,可以在此处找到我应该可行的早期解决方案。 https://bitbucket.org/leedy/filevault

如果您使用 CKEditor 上传图片,则图片存储在 mime 对象中,您实际上可以将多个版本的图像存储在 mime 对象中,作为具有不同名称的不同附件,供以后参考。 我没有任何现成的代码,但应该可以做到。