使用c#代码在azure存储帐户gen 2之间复制大文件

问题描述 投票:0回答:3

我们有文件存储在azure存储帐户gen 2中

我们正在使用api方法来创建,删除和读取文件[在这里提到Read File]

我们正在尝试使用api方法将文件从一个存储帐户复制到另一个存储帐户。有人建议快速实现它吗?

注意:

  • 我在没有AzCopy的情况下在c#中寻找代码方法
  • 在Gen 1中,Data Movement Library就在那里,但我正在寻找Gen 2
c# azure .net-core azure-storage azure-storage-files
3个回答
1
投票

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上执行类似的操作。如果您需要任何帮助,请告诉我。


1
投票

您可以使用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

如果您还有其他问题,请告诉我们。希望这可以帮到你。


1
投票

实际上,找到工作解决方案非常困难,因为官方文档已经过时,而且那里没有任何最新的例子。

过时的方式

可以在这里找到使用blob容器的过时示例:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=windows

该示例使用重命名为WindowsAzure.StorageMicrosoft.Azure.Storage.* NuGet包并拆分为单独的包。

最新的解决方案

我目前正致力于将静态SPA部署到Azure Blob存储。它有一个非常好的功能“静态网站”,提供文件。

有一个工作示例可用于将所有内容从一个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);
© www.soinside.com 2019 - 2024. All rights reserved.