【问题标题】:Copy large file between azure storage account gen 2 using c# code使用 c# 代码在 azure storage account gen 2 之间复制大文件
【发布时间】:2019-06-23 06:17:22
【问题描述】:

我们将文件存储在 azure storage account gen 2 中

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

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

注意:

  • 我正在寻找没有 AzCopy 的 c# 代码方法

  • 在第 1 代中,有数据移动库,但我正在寻找第 2 代

【问题讨论】:

  • 我的回答对你有帮助吗?

标签: c# azure .net-core azure-storage azure-storage-files


【解决方案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

如果您还有其他问题,请告诉我。希望对您有所帮助。

【讨论】:

  • 感谢您的回答,但在寻找 c# 代码时,我添加了 c# 标签,最初认为它会很清楚,更新问题
  • 我不会将其标记为答案,但既然你花时间在我的问题上,我会放弃投票:)
  • 它的第 1 代代码和第 2 代的库尚未发布,这就是我使用 api 调用的原因
  • @user2463514 由于它是预览版,目前似乎没有相关的 SDK。我找到了一个新文档,您可以使用数据工厂移动数据。docs.microsoft.com/en-us/Azure/data-factory/…
【解决方案2】:

实际上,很难找到有效的解决方案,因为官方文档已经过时并且那里缺少任何最新示例。

过时的方式

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

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

最新解决方案

我目前正在将静态 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);

【讨论】:

  • 此解决方案适用于 ADLS Gen2 吗?
  • 适用于Azure Storage account v2。而且,实际上,DataMovement 包是AzCopy 的核心。所以,我想可以用AzCopy 完成的事情,也可以用DataMovement 完成。
  • 您有任何 TransferManager.CopyAsync 方法的示例(CloudBlob、 CloudFile、 Boolean)吗?
猜你喜欢
  • 2021-03-04
  • 2022-11-10
  • 2021-03-01
  • 2020-11-22
  • 1970-01-01
  • 2020-09-27
  • 2019-09-23
  • 2016-05-29
  • 2019-10-02
相关资源
最近更新 更多