Limyee 电商平台的集中文件存储系统将物理文件存储从逻辑文件存储中抽象出来,并支持在操作系统的文件系统或云存储上物理储存文件。可以添加其他物理文件存储提供程序以支持将文件存储在其他位置。
为什么要创建新的文件存储提供程序?
新的文件存储提供程序只需在新的物理技术或服务上物理储存文件。Limyee 电商平台包括对操作系统文件存储(本地硬盘驱动器或 UNC 共享)和云存储的支持。如果必须使用另一个存储系统(例如,不同的云存储提供程序),则可以使用新的文件存储提供程序并将其配置为集中文件系统使用。
文件存储提供程序注意事项
在开发新的文件存储提供程序时,确保支持 CFS 要求非常重要。主要考虑因素包括:
- 提供程序实现必须具有公共的无参数构造函数。
- 文件存储密钥必须介于 1 到 255 个字符之间(Windows 文件系统必须支持每个字符)
- 路径必须介于 0 到 769 个字符之间(Windows 文件系统必须支持每个字符)
- 文件名必须介于 1 到 255 个字符之间(Windows 文件系统必须支持每个字符)
- 在搜索子文件夹时,应将路径视为前缀,而不是分隔的“文件夹”。
- 使用 AddPath 方法创建的路径应由 GetPaths 调用返回,即使该路径不包含任何文件也是如此。
- 如果底层物理实现需要路径的物理表示形式(不涉及文件),则提供程序负责删除未使用的路径。
- 提供程序负责在提供文件之前检查安全文件存储(ISecuredFileStore 和 IGloballySecuredFileStore)的权限(如果提供程序直接提供文件)。
- 提供程序负责在提供文件内容时找不到文件时与“findable”文件存储进行交互 (IFindableCentralizedFileStore)。
- 提供程序负责为返回的文件提供 ICentralizedFile 的实现,其中包括完整的实现,包括可用 GetDownloadUrl 获取文件的直接 HTTP URL。
- 返回的任何 ICentralizedFile 实例都必须存在于底层存储中。如果文件不存在,则必须返回 null 值。
提供程序接口类型
文件存储提供程序是使用 ICentralizedFileStorageProvider 接口定义的。可为提供程序的每个 CFS 文件存储创建一个新的实现实例。对于每个文件存储,将实例化提供程序,并且将通过 Initialize 方法通知实例它的文件存储谁是提供程序,该方法提供文件存储 Key 和在 limyee.config 文件中定义的 XML 节点,用于向提供程序提供配置信息。ICentralizedFileStorageProvider 所需的成员应针对上面列出的注意事项进行自我描述。
各个提供程序可以通过向 ICentralizedFileStorageProvider 实现其他扩展接口来公开其他可选功能:
公开事件
所有文件存储提供程序都应支持事件,但事件在技术上是可选的。若要公开文件操作事件,提供程序应实现 IEventEnabledCentralizedFileStorageProvider。此接口添加了一个只写属性 EventExecutor,可设置为 ICentralizedFileEventExecutor 实现 ,提供程序可以使用它来触发与 CFS 相关的事件。
在自定义提供程序上触发事件时,请确保在进行全局更改时,不适用的事件参数设置是 null 而不是空字符串。例如,删除完整的文件存储时,当路径和文件名在 OnBeforeDelete 和 OnAfterDelete 的参数设置成 null,删除会影响所有路径和文件。
直接 HTTP 处理
默认情况下,CFS 文件的通用下载 URL 将 HTTP 重定向到特定于提供程序的文件下载 URL(通过提供程序的 ICentralizedFile.GetDownloadUrl 实现)。因此,应有对 ICentralizedFileStorageProvider 的扩展支持处理直接的 HTTP,而无需基于客户端的重定向,从而可以提高最终用户的性能。
IHttpRenderableCentralizedFileStorageProvider 扩展了 ICentralizedFileStorageProvider 并添加了 HandleHttpRequest 方法。此方法由通用 CFS HTTP 处理程序调用,并允许自定义提供程序直接处理现有请求。如果该方法返回 true,则平台假定请求已完全处理。如果提供程序返回 false,则将启用处理可能导致 HTTP 重定向的默认行为。
持久的网址生成
CFS 存储文件的持久 URL 嵌入在动态生成的内容中,但缓存时间可能很长,例如从小组件输出的 HTML 或处理的 LESS 文件。默认情况下,CFS 生成的永久 URL 使用通用 URL 格式。如果自定义提供程序可以提供长期 URL(不是定时的 URL),则它可以通过实现 IPersistentUrlGeneratingFileStorageProvider 接口并实现 GetPersistentDownloadUrl 方法,将此功能标识给 Limyee 电商平台。
当文件存储提供程序支持持久的 URL 时,当 CFS 存储的文件请求持久的 URL 时,将使用提供程序的持久的 URL 而不是通用 URL。
配置
文件存储提供程序到文件存储的映射在 limyee.config 文件中定义。若要使用自定义提供程序,需要更新此配置。请参阅安装和配置文档以适当地更新 CFS 的配置。