如何将 blob 上传到 C# 函数中的现有容器

Posted

技术标签:

【中文标题】如何将 blob 上传到 C# 函数中的现有容器【英文标题】:How can I upload a blob to an existing container in C# Function 【发布时间】:2020-11-18 18:49:13 【问题描述】:

我正在学习如何将存储 blob 与 Azure Functions 一起使用,我遵循了以下文档:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet

     // Create a BlobServiceClient object which will be used to create a container client
     BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

     // Create the container and return a container client object
     BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync("<containername>");

     // Get a reference to a blob
     BlobClient blobClient = containerClient.GetBlobClient("<blobname>");

     // Open the file and upload its data
     using FileStream uploadFileStream = File.OpenRead("<localfilepath>");
     await blobClient.UploadAsync(uploadFileStream, true);
     uploadFileStream.Close();

教程中的这段代码只是展示了如何在新容器中上传 blob,但我想上传到现有容器。我能做些什么?谢谢。

【问题讨论】:

使用blobServiceClient.GetContainerReference 我试过了,但它说 blobServiceClient 不包含 GetContainerReference 的定义。我是否缺少 using 指令?我需要添加什么指令? 【参考方案1】:

使用GetBlobContainerClient。您获得的其他遮阳篷均用于v11

var serviceClient = new BlobServiceClient(connectionString);
var containerClient = serviceClient.GetBlobContainerClient(containerName);

【讨论】:

非常感谢,这正是我想要的。【参考方案2】:

试试这个方法

public static async Task<bool> UploadImageAsyncPDF(string imagepath, string originalUploadedFileName)
        
            string filefullpath = string.Empty;
            bool Success = false;
            try
            
                if (!String.IsNullOrEmpty(SecretString) && !String.IsNullOrEmpty(ContainerName))
                using (Stream filestream = System.IO.File.OpenRead(imagepath))
                
                    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(SecretString);
                    CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
                    CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference(ContainerName);
                    cloudBlobContainer.CreateIfNotExists();
                    CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(originalUploadedFileName);
                    cloudBlockBlob.Properties.ContentType = "application/pdf";
                    if (!cloudBlockBlob.Exists())
                    
                        await cloudBlockBlob.UploadFromStreamAsync(filestream);
                        filefullpath = cloudBlockBlob.Uri.ToString();
                        Success = true;
                    
                    else
                    
                        filefullpath = "AlreadyExists";
                        Success = true;
                    
                
            
            catch (Exception ex)
            
                Logger.WriteLog("Exception in UploadImageAsyncPDF:" + ex);
                Success = false;
            
            return Success;
        

【讨论】:

谢谢。我可以在没有 CloudBlobContainer 的情况下做到这一点吗?如果可能的话,只使用 BlobContainerClient? @DorisLv 当然!使用 BlobServiceClient 和 GetBlobContainerClient

以上是关于如何将 blob 上传到 C# 函数中的现有容器的主要内容,如果未能解决你的问题,请参考以下文章

在 azure blob 子容器中从本地上传 zip

将文件上传到 Azure Blob 存储导致大小为 0

如何在没有文件路径的情况下将文件上传到 Azure Blob 存储容器的根目录

如何将静态文件添加/上传到 Azure Blob 存储容器的特定路径

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

我需要将 SQL Azure 中的媒体内容(视频或图像)存储上传到 Azure BLOB 容器