簡體   English   中英

將 blob 從一個容器復制到另一個容器時出錯,最終內容在 C# 中為 0 字節

[英]Error when copying a blob from one container to another, the content final is 0 bytes in C#

我正在開發一個項目,將 blob 從一個容器移動到另一個容器,使用 azure 函數和 C#,我嘗試了不同的方法將文件從一個容器復制到另一個容器,但是只能移動名稱和擴展名但是下載或嘗試訪問文件時,內容為 0 字節。

這是當前實現的代碼。


namespace TestInput
{
    [StorageAccount ("BlobConnectionString")]
    public class TestInput
    {
        [FunctionName("TestInput")]
        public static void Run(
            [BlobTrigger("test/{name}")] Stream myBlob,
            [Blob("testoutput/{name}", FileAccess.Write)] Stream outputBlob,
            string name,
            
                            ILogger log)
        {
            
            var accountName = Environment.GetEnvironmentVariable("AccountName");
            var accountKey = Environment.GetEnvironmentVariable("AccountKey");
            var cred = new StorageCredentials(accountName, accountKey);
            var account = new CloudStorageAccount(cred, true);
            var client = account.CreateCloudBlobClient();
            var sourceContainer = client.GetContainerReference("test");
            var sourceBlob = sourceContainer.GetBlockBlobReference($"{name}");
            var destinationContainer = client.GetContainerReference("testoutput");
            var destinationBlob = destinationContainer.GetBlockBlobReference($"{name}");
            destinationBlob.UploadFromStream(myBlob);
            sourceBlob.Delete(DeleteSnapshotsOption.IncludeSnapshots);
            
        }
    }

}

如果您能告訴我如何解決這個問題或我缺少什么參數,我將不勝感激。

請檢查以下代碼是否有助於使用 Azure Function 將 blob 從一個容器復制到另一個容器:

下面是 .NET 6 Azure Function 類型的 Blob Storage Trigger:

using System;
using System.IO;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

namespace KrishBlobTriggerAF1205
{
    public class Function1
    {
        [FunctionName("Function1")]
        public async Task RunAsync([BlobTrigger("dev/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log,
            [Blob("staging/{name}", FileAccess.Write)] Stream outputBlob)
        {
            var srcconnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
            string sourceContainer = "source";
            string targetContainer = "target";
            string blobName = "blob-name.txt";


            BlobServiceClient serviceClient = new BlobServiceClient(srcconnectionString);
            BlobContainerClient sourceContainerClient = serviceClient.GetBlobContainerClient(sourceContainer);
            BlobContainerClient targetContainerClient = serviceClient.GetBlobContainerClient(targetContainer);
            BlobClient sourceBlobClient = sourceContainerClient.GetBlobClient(blobName);
            BlobClient targetBlobClient = targetContainerClient.GetBlobClient(blobName);
            log.LogInformation("Sending copy blob request....");
            var result = await targetBlobClient.StartCopyFromUriAsync(sourceBlobClient.Uri);
            log.LogInformation("Copy blob request sent....");
            log.LogInformation("============");
            bool isBlobCopiedSuccessfully = false;
            do
            {
                log.LogInformation("Checking copy status....");
                var targetBlobProperties = await targetBlobClient.GetPropertiesAsync();
                log.LogInformation($"Current copy status = {targetBlobProperties.Value.CopyStatus}");
                if (targetBlobProperties.Value.CopyStatus.Equals(CopyStatus.Pending))
                {
                    System.Threading.Thread.Sleep(1000);
                }
                else
                {
                    isBlobCopiedSuccessfully = targetBlobProperties.Value.CopyStatus.Equals(CopyStatus.Success);
                    break;
                }
            } while (true);

            if (isBlobCopiedSuccessfully)
            {
                log.LogInformation("Blob copied successfully. Now deleting source blob...");
                await sourceBlobClient.DeleteAsync();
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM