CKFinder 3 - ASP.NET 连接器文档
应用程序结构

CKFinder 是一个 Ajax 应用程序,其前端完全用 JavaScript 编写。它通过 JSON 消息与服务器通信。在服务器端,有一个用特定服务器语言编写的“连接器”,用于处理前端请求。下图说明了这一点

应用程序结构概述

CKFinder NuGet 包

CKFinder 3 for ASP.NET 连接器分为以下 NuGet 库

每个应用程序至少应该引用以下包

CKSource.CKFinder

此包包含 CKFinder 的 JavaScript 部分。

CKSource.CKFinder.Connector.Config

支持配置文件。处理应用程序配置 (Web.config, App.config) 和独立文件类型。

导出 CKSource.CKFinder.Connector.Config 命名空间。

ConnectorBuilderConfigExtensions 类中实现了最重要的 LoadConfig 方法。在调用 LoadConfig 之前,在 FileSystemFactory 类中注册所有可用的文件系统非常重要。

CKSource.CKFinder.Connector.Core

负责处理命令、发布事件和加载插件的核心库。

导出 CKSource.CKFinder.Connector.Core 命名空间。

此包中包含的最重要的类是 ConnectorBuilder,它应该用于设置连接器。

托管包

一组可能的托管包。CKFinder 可以托管在 Owin 或 WebApi 环境中。

项目中只应使用其中一个包。

CKSource.CKFinder.Connector.Host.Owin

在 Owin 环境中托管。

导出 CKSource.CKFinder.Connector.Host.Owin 命名空间。

此包中包含的最重要的类是 OwinConnectorFactory,它应该用于在 Build 方法中构建连接器。

键值存储包

提供键值存储的各种适配器的包。CKFinder 使用键值存储来缓存。

项目中只应使用其中一个包。

CKSource.CKFinder.Connector.KeyValue.FileSystem

基于文件系统的键值存储适配器。

导出 CKSource.CKFinder.Connector.KeyValue.FileSystem 命名空间。

提供 FileSystemKeyValueStoreProvider.

CKSource.CKFinder.Connector.KeyValue.EntityFramework

用于键值存储的实体框架适配器。

重要:此键值存储适配器可能会导致性能问题,并且已弃用。请改用 CKSource.CKFinder.Connector.KeyValue.FileSystem

导出 CKSource.CKFinder.Connector.KeyValue.EntityFramework 命名空间。

提供 EntityFrameworkKeyValueStoreProvider.

日志记录包

CKSource.CKFinder.Connector.Logs.NLog

CKFinder 中日志记录的 NLog 适配器。

导出 CKSource.CKFinder.Connector.Logs.NLog 命名空间。

此包中包含的最重要的类是 NLogLoggerAdapterFactory,它应该提供给 LoggerManager.LoggerAdapterFactory 属性。

文件系统包

CKSource.FileSystem

所有文件系统的通用类。

导出 CKSource.FileSystem 命名空间。

CKSource.FileSystem.Amazon

Amazon S3 文件系统适配器。

导出 CKSource.FileSystem.Amazon 命名空间。

CKSource.FileSystem.Azure

Azure Storage 文件系统适配器。

导出 CKSource.FileSystem.Azure 命名空间。

CKSource.FileSystem.Dropbox

Dropbox 文件系统适配器。

导出 CKSource.FileSystem.Dropbox 命名空间。

CKSource.FileSystem.Ftp

FTP 文件系统适配器。

导出 CKSource.FileSystem.Ftp 命名空间。

CKSource.FileSystem.Local

本地文件系统适配器。

导出 CKSource.FileSystem.Local 命名空间。

事件

CKFinder ASP.NET 连接器提供了一组事件,可用于更改默认应用程序行为。每个事件都由其唯一的类型标识,并且可以被任意数量的侦听器监听。

要将侦听器附加到事件,可以使用存储在应用程序依赖项注入容器中的事件聚合器对象

var eventAggregator = componentResolver.Resolve<IEventAggregator>();
eventAggregator.Subscribe<BeforeCommandEvent>(next => async messageContext =>
{
/* TODO: 添加您的事件侦听器逻辑。 */
await next(messageContext); /* 调用下一个事件处理程序。 */
/* TODO: 添加您的事件侦听器逻辑。 */
});

可以通过不调用下一个事件处理程序来停止事件传播。

要删除事件侦听器,请调用 Unsubscribe 方法

var eventAggregator = componentResolver.Resolve<IEventAggregator>();
var subscription = eventAggregator.Subscribe<BeforeCommandEvent>(/* 事件处理程序 */);
eventAggregator.Unsubscribe(subscription);

可以在事件处理程序本身中进行取消订阅。

BeforeCommand 事件

这些事件在解析特定命令后触发,即确定应该使用哪个命令类来处理当前请求。

传递给事件侦听器的参数是 BeforeCommandEvent 类型的对象的实例,它包含以下信息

  • 用户数据对象(与所有 CKFinder 事件一样)。
  • ICommandRequest 的实例(与所有 CKFinder 事件一样)。
  • 解析的命令的实例。

在事件侦听器中,可以提供将在命令之前执行的任何其他代码。

要检查触发事件的命令,应该将命令实例的类型与命令类型进行比较

BeforeCommandEvent beforeCommandEvent;
if (beforeCommandEvent.CommandInstance is FileUploadCommand)
{
/* 这是一个 FileUploadCommand,对其执行某些操作。 */
}

下表列出了内置命令的完整列表

命令类型描述
CopyFiles 从选定的文件夹复制文件。
CreateFolder 创建子文件夹。
DeleteFiles 删除给定的文件。
DeleteFolder 删除给定的文件夹。
DownloadFile 从服务器下载文件。
FileUpload 将文件上传到给定的文件夹。
GetFiles 返回给定文件夹的文件列表。
GetFileUrl 返回文件的直接 URL。
GetFolders 返回给定文件夹的子文件夹列表。
GetResizedImages 返回图像文件调整大小版本的列表。
ImageEdit 执行基本图像修改:裁剪、旋转、调整大小。
ImageInfo 返回图像文件尺寸信息。
ImagePreview 创建图像文件的调整大小版本。
ImageResize 创建图像文件的调整大小版本。
Init 这是 CKFinder 发出的第一个命令。它返回连接器的常规设置和所有配置的资源类型。
MoveFiles 将文件从选定的文件夹移动。
Operation 跟踪耗时连接器命令中操作的进度。
Proxy 将文件提供给浏览器,但不强制下载。此命令在您希望在网页上使用无法直接访问的文件时很有用。这些文件可能存储在后端(如私有 FTP 服务器),或者不在 Web 服务器根文件夹中。如果后端定义为 Proxy,则 CKFinder 生成的所有链接都将指向 Proxy 命令。
快速上传 将文件上传到指定文件夹。此命令与 FileUpload 非常类似,用于处理来自 CKEditor 图片或链接对话框的上传。
重命名文件 重命名文件。
重命名文件夹 重命名文件夹。
保存图片 将 Base64 编码的 PNG 图片保存到文件。
缩略图 下载图片文件的缩略图。

中间事件

这些事件在命令类内部触发,在执行任何重要操作(如上传文件、重命名、删除或移动文件和文件夹)之前触发。

命令事件类型说明
CopyFiles CopyFileEvent 每个被复制的文件都会触发此事件
CreateFolder CreateFolderEvent -
DeleteFiles DeleteFileEvent 每个被删除的文件都会触发此事件
DeleteFolder DeleteFolderEvent -
DownloadFile DownloadFileEvent -
FileUpload FileUploadEvent -
GetFiles - -
GetFileUrl - -
GetFolders - -
GetResizedImages - -
ImageEdit ImageEditEvent -
ImageInfo - -
ImagePreview - -
ImageResize ResizeImageEvent -
Init - -
MoveFiles MoveFileEvent 每个被移动的文件都会触发此事件
Operation - -
Proxy ProxyDownloadEvent -
快速上传 FileUploadEvent -
重命名文件 RenameFileEvent -
重命名文件夹 RenameFolderEvent -
保存图片 SaveImageEvent -
缩略图 - -

命令后事件

这些事件在特定命令返回响应后触发。

传递给事件监听器的参数是一个 AfterCommandEvent 类型的对象,它包含以下信息

  • 用户数据对象(与所有 CKFinder 事件一样)。
  • 一个 ICommandRequest 的实例(与所有 CKFinder 事件一样)。
  • 已执行命令的实例。
  • 命令响应对象。

在事件监听器中,可以提供任何将在命令执行后执行的附加代码,也可以替换事件对象中携带的命令结果对象,这样新的提供的响应对象将被使用。

要检查哪个命令触发了事件,请参阅 命令前事件 的描述。