文件储存
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()}")
}