首页 > 解决方案 > Azure 函数将 blob 从一个容器复制到另一个具有不同 blob 名称的容器

问题描述

所以我在这里有两个问题,我试图在 Azure Functions 中使用 C# 来解决:

每当新的 blob 或目录到达源容器时,我想将 blob 从一个容器复制到同一存储帐户中的另一个容器。目标中的新 blob 应该具有不同的名称。

我从使用 Azure 函数 SDK 在 Visual Studio 中编写代码开始,一直到这里:

namespace CopyBlobs
{
    public static class CopyBlob
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("SourceContainerName/{name}", Connection = "AzureWebJobsStorage")]CloudBlockBlob myBlob, IDictionary<string, string> metadata, string name, ILogger log)
         
        
        
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n ContentMD5: {myBlob.Properties.ContentMD5} \n Size: {myBlob.Properties.Length}");
            log.LogInformation($"metadata count {metadata.Count}");
            {
                var destinationContainer = myBlob.Container.ServiceClient.GetContainerReference(metadata["Destination"]);
                destinationContainer.CreateIfNotExistsAsync();                
                CloudBlockBlob outputBlob = destinationContainer.GetBlockBlobReference(name);           
                outputBlob.StartCopyAsync(myBlob);
            }
        }
    }
}

Q1) 我在 var destinationContainer = myBl...行收到错误,因为未定义目标键。我想知道在 Destination 键中定义的位置和内容以及是否有人可以向我展示一个示例(我相信它应该是我在 localsetting.json 文件中的目标容器名称,但我正在努力正确定义它)。

Q2) 被复制的目标 blob 应该有一个不同的名称,它将类似于操作为 base64 的原始名称。我怎样才能做到这一点?

我是新来做这个 Azure 功能的事情,所以我会很慢,但希望能在这里得到一些快速的帮助。

谢谢

标签: azure-functionsazure-blob-storageazure-function-app

解决方案


Q1) 我在 var destinationContainer = myBl... 行收到错误,因为未定义目标键。我想知道在 Destination 键中定义的位置和内容,以及是否有人可以向我展示一个示例(我相信它应该是我在 localsetting.json 文件中的目标容器名称,但我正在努力正确定义它)。

您只需要容器的名称即可锁定您需要的容器。我认为它不需要涉及你提到的概念。

这是 API 参考:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.database.getcontainer?view=azure-dotnet#Microsoft_Azure_Cosmos_Database_GetContainer_System_String _

Q2) 被复制的目标 blob 应该有一个不同的名称,它将类似于操作为 base64 的原始名称。我怎样才能做到这一点?

您可以查看此博客:(有详细步骤。)

http://gauravmantri.com/2012/11/28/storage-client-library-2-0-migrating-blob-storage-code/

您可以在创建接收器 blob 的 CloudBlockBlob 对象时设置 blob 名称。只需要注意 menthod 更改为 'StartCopyAsync'

public virtual Task<string> StartCopyAsync(CloudBlockBlob source);

这是 API 参考:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.blob.cloudblockblob.startcopyasync?view=azure-dotnet-legacy


推荐阅读