如何使用azure函数中的元数据将blob文档从一个容器移动到另一个容器?

时间:2019-07-19 05:08:31

标签: blob azure-functions

我正在尝试将Blob文档与元数据一起从一个容器复制到另一个容器。我已经从azure函数尝试了以下代码,但是在代码中提到了错误。

HTTP请求:

{
   "SourceUrl": "https://devstorage.blob.core.windows.net/test-docs/123.jpeg",
   "DestinationUrl": "https://devstorage.blob.core.windows.net/test-docs-completed/123.jpeg"
}

天蓝色功能代码:

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, ILogger log)
{
    string reqAsString = await req.Content.ReadAsStringAsync();
    MoveProcessedDocumentRequest blobCopyRequest = JsonConvert.DeserializeObject<MoveProcessedDocumentRequest>(reqAsString);

    CloudBlockBlob cloudBlockSource = new CloudBlockBlob(new Uri(blobCopyRequest.SourceUrl));
    await cloudBlockSource.FetchAttributesAsync();

    CloudBlobContainer cloudBlockDestinationContainer = new CloudBlockBlob(new Uri(blobCopyRequest.DestinationUrl)).Container;
    string name = cloudBlockSource.Uri.Segments.Last();
    CloudBlockBlob cloudBlockDestination;
    cloudBlockDestination = cloudBlockDestinationContainer.GetBlockBlobReference(name);

    // Copy metadata
    foreach (var meta in cloudBlockSource.Metadata)
    {
        cloudBlockDestination.Metadata.Add(new KeyValuePair<string, string>(meta.Key, meta.Value));
    }

    await cloudBlockDestination.StartCopyAsync(cloudBlockSource);
    // Exception: Microsoft.Azure.Storage.Common: The specified resource does not exist.

    return req.CreateResponse(HttpStatusCode.OK);
}

1 个答案:

答案 0 :(得分:0)

您应使用df -h| sed "s/%//g"|awk 'NR>1 {print $0}'| awk '{if($(NF-1) >90) {print $NF" Alert:Disk out of space "$(NF-1)"%"}}' > disk_usage while read -r line; do Path= echo "$line" cd path find . -size +1G -exec du -h {} \;| sort -nr done < "$disk_usage" 实例修改代码。

更改:

CloudBlobContainer

收件人:

CloudBlobContainer cloudBlockDestinationContainer = new CloudBlockBlob(new Uri(blobCopyRequest.DestinationUrl)).Container;

并且DestinationUrl是destcontainer网址。

HTTP请求:

var uri = new Uri("blobCopyRequest.DestinationUrl");
var storage = new StorageCredentials("your account name", "your storage key");
CloudBlobContainer cloudBlockDestinationContainer = new CloudBlobContainer(uri, storage);