将Azure Blob存储文件从一个文件夹移动到另一个文件夹

时间:2020-06-05 16:07:54

标签: c# azure asp.net-core azure-storage-blobs

我正在尝试将文件从同一文件夹中的一个文件夹复制到另一个文件夹(即:container/processing中的所有内容都复制到container/archived中)。以下代码创建目标文件夹和文件,但始终为0字节。此代码有什么问题?我试过只使用一个流,同样的问题。 _blobServiceClient是类型BlobServiceClient。如果我下载该对象并将其序列化为C#类,然后重新上传它,则它可以工作。但是我宁愿尽可能地提高效率,因为我只是在BlobStorage中移动内容,实际上不需要使用代码中的内容。

var containerClient = _blobServiceClient.GetBlobContainerClient(container);
var blobHierarchyItems = containerClient.GetBlobsByHierarchy(BlobTraits.None, BlobStates.None, null, sourceFolder);

foreach (var bhi in blobHierarchyItems)
{
    using (var downStream = new MemoryStream())
    using (var upStream = new MemoryStream())
    {
        var blobClient = containerClient.GetBlobClient(bhi.Blob.Name);
        blobClient.DownloadTo(downStream);
        containerClient.UploadBlob($"{targetFolder}/{bhi.Blob.Name}", upStream);
        downStream.Position = 0;
        await downStream.CopyToAsync(upStream);
    }
}

我也尝试过使用BlockBlobClient.StartCopyFromUriAsync函数。结果是相同的,它创建目标文件夹和Blob,但没有数据。这是代码:

var containerClient = _blobServiceClient.GetBlobContainerClient(container);
var blobHierarchyItems = containerClient.GetBlobs(BlobTraits.None, BlobStates.None, sourceFolder);
var targetBlockClient = containerClient.GetBlockBlobClient(targetFolder);

foreach (var bhi in blobHierarchyItems)
{
    var blobUri = new Uri($"{containerClient.Uri}/{bhi.Name}");
    var copyOp = await targetBlockClient.StartCopyFromUriAsync(blobUri);
    await copyOp.WaitForCompletionAsync();
}

源文件夹

enter image description here

目标文件夹

enter image description here

0 个答案:

没有答案