У меня есть консольное приложение, написанное на C # поверх платформы Core.NET 2.2.
Я хочу изменить свое хранилище с локального хранилища BLOB-объектов Azure.Я загрузил WindowsAzure.Storage для подключения к моей учетной записи Azure.
У меня есть следующий интерфейс
public interface IStorage
{
Task Create(Stream stram, string path);
}
Я создал следующий интерфейс как фабрика контейнеров BLOB-объектов
public interface IBlobContainerFactory
{
CloudBlobContainer Get();
}
и вот моя реализация Azure
public class AzureBlobStorage : IStorage
{
private IBlobContainerFactory ContainerFactory
public AzureBlobStorage(IBlobContainerFactory containerFactory)
{
ContainerFactory = containerFactory;
}
public async Task Create(Stream stream, string path)
{
CloudBlockBlob blockBlob = ContainerFactory.Get().GetBlockBlobReference(path);
await blockBlob.UploadFromStreamAsync(stream);
}
}
Затем в моем файле program.cs
я попробовал следующее
if (Configuration["Default:StorageType"].Equals("Azure", StringComparison.CurrentCultureIgnoreCase))
{
services.AddSingleton(opts => new AzureBlobOptions
{
ConnectionString = Configuration["Storages:Azure:ConnectionString"],
DocumentContainer = Configuration["Storages:Azure:DocumentContainer"]
});
services.AddSingleton<IBlobContainerFactory, DefaultBlobContainerFactory>();
services.AddScoped<IStorage, AzureBlobStorage>();
}
else
{
services.AddScoped<IStorage, LocalStorage>();
}
Container = services.BuildServiceProvider();
// Resolve the storage from the IoC container
IStorage storage = Container.GetService<IStorage>();
// Read a local file
using (FileStream file = File.Open(@"C:\Screenshot_4.png", FileMode.Open))
{
try
{
// write it to the storeage
storage.Create(file, "test/1.png");
}
catch (Exception e)
{
}
}
Однако, когда я использую AzureBlobStorage
Ничего не произошло.Файл не записывается в хранилище и не выдается никаких исключений!
Как я могу устранить его?Как правильно записать файл в хранилище?
Обратите внимание, что при изменении конфигурации в Default:StorageType
на Local
файл записывается локально, как и ожидалось.Но не могу заставить его написать в блоге Azure.