File io Azure存储/文件系统抽象库

File io Azure存储/文件系统抽象库,file-io,azure-storage,azure-storage-blobs,File Io,Azure Storage,Azure Storage Blobs,作为我目前正在开发的web应用程序的一部分,我需要将文件写入存储。最初将在Azure网站上托管,但将来我希望能够在非Azure服务器上托管它 所以-我正在寻找一个库(我希望有一个库存在),它可以使输出文件到Azure Blob存储或本地文件系统之间的切换变得容易。理想情况下,它应该有一个公共API,允许您仅通过更改配置文件在存储位置之间切换 我在寻找具有这种功能的库时遇到了一些问题,我希望有人能给我指出正确的方向。不确定是否存在这样的库。如果存在一个抽象库,那么它需要提供Azure、S3、本地文

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

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


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

不确定是否存在这样的库。如果存在一个抽象库,那么它需要提供Azure、S3、本地文件系统、机架空间等的实现

无论如何,它的实现是相当直接的。我们的项目有两个不同的版本,基于云的和基于本地的,主要的实际区别是Blob存储。我们所做的是针对一个接口构建核心上传/下载等逻辑,有两种不同的实现,一种用于Azure Blob存储,另一种用于本地文件存储,使用StructureMap根据配置值获取对具体实现的引用

显然,我们没有复制接口中的每一个BLOB存储API,只是复制了系统所需的最低限度的API

一些代码示例:

接口:(
BlobBase
是我们的自定义类,包含容器名称、文件名、内容类型等信息,
BlobStorageProviderStatus
是提供一些状态信息的自定义枚举。但是您知道了!)

Web.config已被删除

<add key="AzureBlobStorage" value="true" />

StructureMap注册的简化版本:

  x.For<IBlobStorageProvider>()
                     .Use(() => bool.Parse(ConfigurationManager.AppSettings["AzureBlobStorage"])
                                    ? new AzureBlobStorageProvider()
                                    :  new FileSystemStorageProvider());
x.For()
.Use(()=>bool.Parse(ConfigurationManager.AppSettings[“AzureBlobStorage]”)
?新AzureBlobStorageProvider()
:new FileSystemStorageProvider());
和实际使用示例:

 IBlobStorageProvider blobStorage = ObjectFactory.GetInstance<IBlobStorageProvider>();
 blobStorage.CreateContainer("image"); 
IBlobStorageProvider blobStorage=ObjectFactory.GetInstance();
CreateContainer(“图像”);

感谢您的发帖,感谢您抽出时间详细介绍!我一直在考虑这样一个解决方案——只是想知道是否有其他人将其作为预打包库发布。这似乎是一个很常见的情况。实际上,我可能会把这个问题再多问几天,以防有人知道一个现成的图书馆。我也在寻找这样的图书馆,结果我自己也在找。如果有这样一个抽象库就好了,因为所有的存储供应商都在涌现。好吧,经过更广泛的搜索,我终于找到了两个符合条件的库(但我对它们都不太满意)。它们是:X.Storage()和FileWarehouse()。它们都没有提供我正在寻找的一个关键特性——基于可扩展配置的配置(类似于log4net)。一个起点,非越少越好
 IBlobStorageProvider blobStorage = ObjectFactory.GetInstance<IBlobStorageProvider>();
 blobStorage.CreateContainer("image");