Не уверен, существует ли такая библиотека. Если существует библиотека абстракции, я бы подумал, что ей потребуется обеспечить реализацию Azure, S3, локального FileSytem, Rackspace и т. Д.
В любом случае, это довольно просто реализовать. Наш проект имел две разные версии, основанные на облаке и на основе, основанные на основной реальной разнице, являющейся хранилищем Blob. Мы сделали так, чтобы создать основную загрузку/загрузку и т. Д. С интерфейсом, иметь две разностные реализации: один для хранилища Azure Blob и один для локального хранилища файлов, используемый StructureMap для получения ссылки на конкретную реализацию на основе значения конфигурации
мы, очевидно, не копировать каждый и каждый API BLOB Storage в интерфейсе, но только минимально необходимый нашей системой
Некоторого примера кода:
интерфейс: (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 Registeration:
x.For<IBlobStorageProvider>()
.Use(() => bool.Parse(ConfigurationManager.AppSettings["AzureBlobStorage"])
? new AzureBlobStorageProvider()
: new FileSystemStorageProvider());
и фактического использования образца:
IBlobStorageProvider blobStorage = ObjectFactory.GetInstance<IBlobStorageProvider>();
blobStorage.CreateContainer("image");
Ok, после того как некоторые более обширные поисков мне удалось c ome через пару библиотек, которые соответствуют законопроекту (но я не совсем доволен ни одним из них). Это: X.Storage (https://www.nuget.org/packages/xstorage/) и FileWarehouse (https://www.nuget.org/packages/FileWarehouse/). Ни один из них не предлагает одну из ключевых функций, которые я ищу - расширяемая конфигурация на основе конфигурации (вдоль строк log4net). Отправная точка, не менее –