我们有文件存储在azure存储帐户gen 2中
我们正在使用api方法来创建,删除和读取文件[在这里提到Read File]
我们正在尝试使用api方法将文件从一个存储帐户复制到另一个存储帐户。有人建议快速实现它吗?
注意:
AzCopy是一个命令行实用程序,旨在使用旨在实现最佳性能的简单命令,将数据复制到Microsoft Azure Blob,文件和表存储中。您可以在文件系统和存储帐户之间或存储帐户之间复制数据。
注意: - 您可以从提到的link下载Azcopy for windows
要将一个blob从一个存储帐户复制到另一个存储帐户容器,您可以使用以下内容:
AzCopy /Source:https://sourceaccount.blob.core.windows.net/mycontainer1 /Dest:https://destaccount.blob.core.windows.net/mycontainer2 /SourceKey:key1 /DestKey:key2 /Pattern:abc.txt
将容器中的所有blob复制到另一个存储帐户
AzCopy /Source:https://sourceaccount.blob.core.windows.net/mycontainer1
/Dest:https://destaccount.blob.core.windows.net/mycontainer2 /SourceKey:key1 /DestKey:key2 /S
我给出的示例是针对Windows平台的,您也可以在Linux上执行类似的操作。如果您需要任何帮助,请告诉我。
您可以使用AzCopy传输数据。您可以在文件系统和存储帐户之间复制数据,也可以在存储帐户与AzCopy之间复制数据。
关于如何使用AzCopy的详细信息,您可以参考这个官方doc。在本文档中,有下载链接和教程。
更新:关于在文件共享之间传输文件,您可以参考此代码:
AzCopy /Source:https://myaccount1.file.core.windows.net/myfileshare1/ /Dest:https://myaccount2.file.core.windows.net/myfileshare2/ /SourceKey:key1 /DestKey:key2 /S
关于文件存储中复制文件的其他信息,您可以参考doc。
如果您还有其他问题,请告诉我们。希望这可以帮到你。
实际上,找到工作解决方案非常困难,因为官方文档已经过时,而且那里没有任何最新的例子。
过时的方式
可以在这里找到使用blob容器的过时示例:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=windows
该示例使用重命名为WindowsAzure.Storage
的Microsoft.Azure.Storage.*
NuGet包并拆分为单独的包。
最新的解决方案
我目前正致力于将静态SPA部署到Azure Blob存储。它有一个非常好的功能“静态网站”,提供文件。
有一个工作示例可用于将所有内容从一个blob容器复制到另一个blob容器。请将其视为提示(不准备生产)。
您所需要的只是:
Microsoft.Azure.Storage.DataMovement
NuGet包。这是代码:
// I left fully qualified names of the types to make example clear.
var connectionString = "Connection string from `Azure Portal > Storage account > Access Keys`";
var sourceContainerName = "<source>";
var destinationContainerName = "<destination>";
var storageAccount = Microsoft.Azure.Storage.CloudStorageAccount.Parse(connectionString);
var client = storageAccount.CreateCloudBlobClient();
var sourceContainer = client.GetContainerReference(sourceContainerName);
var destinationContainer = client.GetContainerReference(destinationContainerName);
// Create destination container if needed
await destinationContainer.CreateIfNotExistsAsync();
var sourceBlobDir = sourceContainer.GetDirectoryReference(""); // Root directory
var destBlobDir = destinationContainer.GetDirectoryReference("");
// Use UploadOptions to set ContentType of destination CloudBlob
var options = new Microsoft.Azure.Storage.DataMovement.CopyDirectoryOptions
{
Recursive = true,
};
var context = new Microsoft.Azure.Storage.DataMovement.DirectoryTransferContext();
// Perform the copy
var transferStatus = await Microsoft.Azure.Storage.DataMovement.TransferManager
.CopyDirectoryAsync(sourceBlobDir, destBlobDir, true, options, context);