Azure存储/文件系统抽象库



作为目前正在开发的web应用程序的一部分,我需要将文件写入存储。最初将在Azure网站上托管,但将来我希望能够在非Azure服务器上托管。

所以,我正在寻找一个库(我希望它存在),它可以很容易地在输出文件到Azure Blob存储或本地文件系统之间切换。理想情况下,它将有一个通用的API,并允许您只通过更改配置文件在存储位置之间切换。

我在寻找具有这种功能的库时遇到了一些问题,我希望有人能为我指明正确的方向。

不确定是否存在这样的库。如果存在一个抽象库,我会认为它需要提供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"); 

相关内容

最新更新