文件储存


ZKWeb提供了标准的文件储存接口,抽象化了文件的读取保存和列出。
默认文件储存使用了本地的文件系统,可以通过自己实现IFileStorage实现存取分布式的文件系统。
IFileStorage的接口如下

public interface IFileStorage {
    IFileEntry GetTemplateFile(string path);
    IFileEntry GetResourceFile(params string[] pathParts);
    IFileEntry GetStorageFile(params string[] pathParts);
    IDirectoryEntry GetStorageDirectory(params string[] pathParts);
}

GetTemplateFile用于获取Html模板文件,查找顺序应该为自定义储存 => 插件文件夹下的templates
GetResourceFile用于获取资源文件,查找顺序应该为自定义储存 => 插件文件夹
GetStorageFile用于获取储存文件,可以读取或写入
GetStorageDirectory用于获取储存文件夹,可以列出文件夹下的文件和子文件夹

使用文件储存

获取模板文件的例子

var fileStorage = Application.Ioc.Resolve<IFileStorage>();
var fileEntry = fileStorage.GetTemplateFile("abc.html");
var contents = fileEntry.ReadAllText();

获取资源文件的例子

var fileStorage = Application.Ioc.Resolve<IFileStorage>();
var fileEntry = fileStorage.GetResourceFile("abc.jpg");
using (var stream = fileEntry.OpenRead()) { }

保存储存文件的例子

var fileStorage = Application.Ioc.Resolve<IFileStorage>();
var fileEntry = fileStorage.GetStorageFile("static", "abc.txt");
fileEntry.WriteAllText("test storage file");

列出储存文件夹下的文件的例子(非递归)

var fileStorage = Application.Ioc.Resolve<IFileStorage>();
var directoryEntry = fileStorage.GetStorageDirectory("static");
var childFiles = directoryEntry.EnumerateFiles();
foreach (var file in childFiles) {
    console.WriteLine($"{file.Filename}: {file.ReadAllText()}")
}