代码之家  ›  专栏  ›  技术社区  ›  Junior

如何使用C#将文件上载到Azure Blob存储?

  •  0
  • Junior  · 技术社区  · 7 年前

    我想将我的存储从本地更改为Azure blob存储。我下载了 WindowsAzure.Storage

    我有以下接口

    public interface IStorage
    {
        Task Create(Stream stram, string path);
    }
    

    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博客。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Random    7 年前

    我关注了这篇文章: https://docs.microsoft.com/en-us/dotnet/api/overview/azure/storage?view=azure-dotnet

    public interface IStorage
    {
        Task Create(Stream stream, string path);
    }
    
    public class AzureBlobStorage : IStorage
    {
        public async Task Create(Stream stream, string path)
        {
            // Initialise client in a different place if you like
            string storageConnectionString = "DefaultEndpointsProtocol=https;"
                        + "AccountName=[ACCOUNT]"
                        + ";AccountKey=[KEY]"
                        + ";EndpointSuffix=core.windows.net";
    
            CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
            var blobClient = account.CreateCloudBlobClient();
    
            // Make sure container is there
            var blobContainer = blobClient.GetContainerReference("test");
            await blobContainer.CreateIfNotExistsAsync();
    
            CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(path);
            await blockBlob.UploadFromStreamAsync(stream);
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            // Put your DI here
            var storage = new AzureBlobStorage();
    
            // Read a local file
            using (FileStream file = File.Open(@"C:\cartoon.PNG", FileMode.Open))
            {
                try
                {
                    // Pattern to run an async code from a sync method
                    storage.Create(file, "1.png").ContinueWith(t =>
                    {
                        if (t.IsCompletedSuccessfully)
                        {
                            Console.Out.WriteLine("Blob uploaded");
                        }
                    }).Wait();
                }
                catch (Exception e)
                {
                    // Omitted
                }
            }
        }
    }
    
        2
  •  0
  •   Rahul Ruikar    7 年前

    您可能想看看这个线程。

    ASP.NET Web API Azure Blob Storage Unstructured