【问题标题】:C# Azure Storage - How to Upload a File to an already Existing ContainerC# Azure 存储 - 如何将文件上传到已经存在的容器
【发布时间】:2018-10-22 09:41:48
【问题描述】:

希望对如何将文件上传到 Azure 存储中的现有容器提供一些帮助。我关注了Azure doc - 但它似乎指向创建一个新容器并在那里上传一个文件。如果我已经在 Azure 中预先创建了一个容器,例如“testresult1”,然后尝试使用 C# 代码在那里上传一个文件,那么它会抱怨容器“testresult1”已经存在。

这是我使用的错误代码:

CloudBlobContainer = cloudBlobClient.GetContainerReference("testresult1");

Microsoft doc 中的示例代码可以正常工作,但它会创建一个新容器“quickstartblobs”加上 GUID,然后将文件上传到那里。我正在尝试查看是否有任何选项,如果容器已经存在,那么我们如何使用代码将一个或多个文件上传到该容器中,而无需为每个上传的文件创建一个新容器。

一个相关问题:在 Azure Storage 中可以创建多少个容器有上限吗?是否与 Azure 订阅有关?

谢谢。

【问题讨论】:

标签: c# visual-studio azure-storage azure-blob-storage


【解决方案1】:

您可以使用CreateIfNotExistsAsync 方法,该方法会启动一个异步操作,如果容器不存在则创建该容器。

使用以下代码获取您现有的容器并按照文档继续上传文件。

cloudBlobContainer = cloudBlobClient.GetContainerReference("testresult1");
await cloudBlobContainer.CreateIfNotExistsAsync();

在 Azure 存储中可以创建多少个容器有上限吗?是否与 Azure 订阅有关?

每个存储帐户的最大 blob 容器数、blob、文件共享、表、队列、实体或消息没有限制

单个 blob 容器的最大大小为 500 TiB。每个 Blob 容器的最大存储访问策略数为 5。

更多详情可以参考azure subscription service limits

【讨论】:

    【解决方案2】:

    获取容器的方法。

        public CloudBlobContainer GetCloudBlobContainer(string strBlobContainerName)
        {
            CloudStorageAccount storageAccount = 
    CloudStorageAccount.Parse(Convert.ToString(ConfigurationManager.AppSettings["BlobConnectionString"]));
                        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                        CloudBlobContainer blobContainer = blobClient.GetContainerReference(strBlobContainerName);
    
                        blobContainer.CreateIfNotExists();
                        blobContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
                        return blobContainer;
         }
    

    以下代码用于在 Azure 上上传文件。

    CloudBlobContainer blobContainer = new BlobStorageServiceBLL().GetCloudBlobContainer(containerName);
    CloudBlockBlob blob = blobContainer.GetBlockBlobReference(uploadedFileName);
    blob.UploadFromStream(file.InputStream);
    

    注意:我的 GetCloudBlobContainer 方法进入 BlobStorageServiceBLL 控制器,它是不同的类文件,但您可以在同一个类文件中管理它。

    【讨论】:

    • 您好 Dipak,感谢您的反馈。对于此代码段: blob.UploadFromStream(file.InputStream); -- 什么是“文件”?
    猜你喜欢
    • 2022-11-11
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2019-08-13
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多