作为我目前正在开发的Web应用程序的一部分,我需要将文件写入存储。最初将托管在Azure网站上,但将来我希望能够在非Azure服务器上托管它。
所以 - 我正在寻找一个库(我希望它存在),这样可以轻松地在输出文件到Azure Blob存储或本地文件系统之间切换。理想情况下,具有通用API的东西允许您通过仅更改配置文件在存储位置之间切换。
我在寻找具有此类功能的库时遇到了一些问题,我希望有人能指出我正确的方向。
答案 0 :(得分:0)
不确定此类库是否存在。如果存在一个抽象库,那么我认为它需要提供Azure,S3,本地FileSytem,Rackspace等的实现。
无论如何,实施起来相当简单。我们的项目有两个不同的版本,基于云和内部部署,主要的真正区别是Blob存储。我们所做的是针对一个接口构建核心上传/下载等逻辑,对Azure Blob存储有一个不同的实现,一个用于本地文件存储,使用StructureMap来获取基于配置值的具体实现的引用
我们显然没有在界面中复制每个BLOB存储API,而只是我们系统所需的最小值
一些代码示例:
接口:(BlobBase
是我们的自定义类,包含容器名称,文件名,内容类型等信息。BlobStorageProviderStatus
是自定义枚举,提供一些状态信息。但是你明白了!)
public interface IBlobStorageProvider
{
void CreateContainer(string containerName);
BlobStorageProviderStatus UploadFile(BlobBase file, bool uploadAsNewversion, Stream data, int chunk, int totalChunks, out string version);
BlobStorageProviderStatus DownloadToStream(BlobBase file, Stream target, int chunkSize, IClientConnection clientConnection);
void Delete(BlobBase blobBase);
void DeleteDirectory(string directoryPath, string blobContainer);
BlobStorageProviderStatus UploadFile(string container, string folder, string fileName, Stream data, string contentType);
void DownloadToStream(string container, string filePath, Stream target);
}
Web.config有
<add key="AzureBlobStorage" value="true" />
和StructureMap注册的简化版本:
x.For<IBlobStorageProvider>()
.Use(() => bool.Parse(ConfigurationManager.AppSettings["AzureBlobStorage"])
? new AzureBlobStorageProvider()
: new FileSystemStorageProvider());
和实际使用样本:
IBlobStorageProvider blobStorage = ObjectFactory.GetInstance<IBlobStorageProvider>();
blobStorage.CreateContainer("image");