[英]Want to download and upload file from a folder inside the blob using new sdk - Azure.Storage.Blobs package
[英]How to move a file on Azure File Storage from one sub folder to another sub folder using the Azure Storage SDK?
我想弄清楚如何将 Azure 文件存储中的文件从一个位置移动到同一共享中的另一个位置。
例如
source -> \\Share1\someFile.txt
destination -> \\Share1\Foo\Bar\someFile.txt
CreateIfNotExistsAsync
?干杯!
有关 Azure 存储文件参考的入门指南对此进行了记录。
您需要的是将文件从一个位置复制到另一个位置的StartCopy
方法。
// Start the copy operation.
destinationFile.StartCopy(sourceFile);
而且,是的,如果目标目录不存在,您将不得不创建它。
像这样:
public static void MoveTo(this CloudFile source, CloudFileDirectory directory)
{
var target = directory.GetFileReference(source.Name);
target.StartCopy(source);
source.Delete();
}
不幸的是,我们没有通过客户端 SDK 所依赖的 REST API 公开的移动/重命名功能。 您当然可以通过 SMB 执行这些功能。 我们的积压工作中确实有这些功能,但还没有实施时间表。
Azure 存储文件共享是与 SMB 兼容的共享。 因此,您应该能够使用正常的文件 I/O 操作进行文件复制/移动。 这与直接 blob 操作形成对比,在直接 blob 操作中,您需要通过 Storage API 专门创建容器、启动 blob 副本等。
这是带有新 blob API 的 Asp.net Core 3+ 的更新答案。 您可以将BlockBlobClient与StartCopyFromUriAsync 一起使用,如果您想等待完成WaitForCompletionAsync
var blobServiceClient = new BlobServiceClient("StorageConnectionString");
var containerClient = blobServiceClient.GetBlobContainerClient(container);
var blobs = containerClient.GetBlobs(BlobTraits.None, BlobStates.None, sourceFolder);
await Task.WhenAll(blobs.Select(async blob =>
{
var targetBlobClient = containerClient.GetBlockBlobClient($"{targetFolder}/{blob.Name}");
var blobUri = new Uri($"{containerClient.Uri}/{blob.Name}");
var copyOp = await targetBlobClient.StartCopyFromUriAsync(blobUri);
return await copyOp.WaitForCompletionAsync();
}).ToArray());
或者,如果您不需要等待完成并且只想“开火并忘记”。
foreach (var blob in blobs)
{
var targetBlobClient = containerClient.GetBlockBlobClient($"{targetFolder}/{blob.Name}");
var blobUri = new Uri($"{containerClient.Uri}/{blob.Name}");
targetBlobClient.StartCopyFromUriAsync(blobUri);
}
Azure blob 子控制器是一项虚拟功能,因为它们实际上并不存在,blob/文件的名称包含完整路径。 因此,您不必显式“创建”目录。
我不认为 Azure blob/文件存在原子“重命名”方法......要解决它,您必须复制(使用新名称)然后删除原始名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.