![](/img/trans.png)
[英]Copy blobs from one Azure container to another using ASP.NET Core 6.0 MVC with C#
[英]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.