你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 .NET 的 Azure 存储数据移动 Blob 客户端库 - 版本 12.0.0-beta.3
服务器版本:2020-04-08、2020-02-10、2019-12-12、2019-07-07 和 2020-02-02
Azure 存储是一项 Microsoft 托管服务,其提供的云存储的可用性、安全性、持久性、可伸缩性和冗余性都很高。 Azure 存储包括 Azure Blob (对象) 、Azure Data Lake Storage Gen2、Azure 文件存储和 Azure 队列。
Azure 存储数据移动库针对上传、下载和复制客户数据进行优化。
Azure.Storage.DataMovement.Blobs 库提供由其他 Azure 存储客户端库共享的基础结构。
源代码 | 包 (NuGet) | API 参考文档 | REST API 文档 | 产品文档
入门
安装包
安装要与 NuGet 一起使用的适用于 .NET 的 Azure 存储客户端库, Azure.Storage.DataMovement.Blobs
客户端库将包括在内:
dotnet add package Azure.Storage.DataMovement --prerelease
dotnet add package Azure.Storage.DataMovement.Blobs --prerelease
先决条件
若要创建新的存储帐户,可以使用 Azure 门户、Azure PowerShell或 Azure CLI。 下面是使用 Azure CLI 的示例:
az storage account create --name MyStorageAccount --resource-group MyResourceGroup --location westus --sku Standard_LRS
验证客户端
Azure.Storage.DataMovement.Blobs 库使用 Azure.Storage.Blobs 包中的客户端与Azure Blob 存储服务通信。 有关详细信息,请参阅 Azure.Storage.Blobs 身份验证文档。
关键概念
Azure 存储通用客户端库包含 [身份验证凭据][auth_credentials] 和 RequestFailedException 等共享基础结构。
线程安全
我们保证所有客户端实例方法都是线程安全的,并且相互独立, (准则) 。 这可确保重用客户端实例的建议始终是安全的,即使跨线程也是如此。
其他概念
客户端选项 | 访问响应 | 长时间运行的操作 | 处理失败 | 诊断 | 嘲笑 | 客户端生存期
示例
使用 BlobContainerClient 扩展方法上传和下载目录的示例。
实例化 BlobContainerClient
BlobServiceClient service = new BlobServiceClient(serviceUri, credential);
BlobContainerClient container = service.GetBlobContainerClient(containerName);
将本地目录上传到容器的根目录
DataTransfer transfer = await container.StartUploadDirectoryAsync(localPath);
await transfer.AwaitCompletion();
通过指定目录前缀将本地目录上传到容器中的虚拟目录
DataTransfer transfer = await container.StartUploadDirectoryAsync(localPath, blobDirectoryPrefix);
await transfer.AwaitCompletion();
将本地目录上传到容器中的虚拟目录,并指定更多高级选项
BlobContainerClientTransferOptions options = new BlobContainerClientTransferOptions
{
BlobContainerOptions = new BlobStorageResourceContainerOptions
{
DirectoryPrefix = blobDirectoryPrefix
},
TransferOptions = new TransferOptions()
{
CreateMode = StorageResourceCreateMode.Overwrite,
}
};
DataTransfer transfer = await container.StartUploadDirectoryAsync(localPath, options);
await transfer.AwaitCompletion();
将整个容器下载到本地目录
DataTransfer transfer = await container.StartDownloadToDirectoryAsync(localDirectoryPath);
await transfer.AwaitCompletion();
通过指定目录前缀在容器中下载目录
DataTransfer tranfer = await container.StartDownloadToDirectoryAsync(localDirectoryPath2, blobDirectoryPrefix);
await tranfer.AwaitCompletion();
从指定更多高级选项的容器下载
BlobContainerClientTransferOptions options = new BlobContainerClientTransferOptions
{
BlobContainerOptions = new BlobStorageResourceContainerOptions
{
DirectoryPrefix = blobDirectoryPrefix
},
TransferOptions = new TransferOptions()
{
CreateMode = StorageResourceCreateMode.Overwrite,
}
};
DataTransfer tranfer = await container.StartDownloadToDirectoryAsync(localDirectoryPath2, options);
await tranfer.AwaitCompletion();
使用 BlobContainerClient 扩展方法上传和下载目录的示例。
使用选项创建 TransferManager 实例
// Create BlobTransferManager with event handler in Options bag
TransferManagerOptions transferManagerOptions = new TransferManagerOptions();
TransferOptions options = new TransferOptions()
{
MaximumTransferChunkSize = 4 * Constants.MB,
CreateMode = StorageResourceCreateMode.Overwrite,
};
TransferManager transferManager = new TransferManager(transferManagerOptions);
开始从本地文件上传到块 Blob
DataTransfer dataTransfer = await transferManager.StartTransferAsync(
sourceResource: new LocalFileStorageResource(sourceLocalPath),
destinationResource: new BlockBlobStorageResource(destinationBlob));
await dataTransfer.AwaitCompletion();
将选项应用于块 Blob 下载
await transferManager.StartTransferAsync(
sourceResource: new BlockBlobStorageResource(sourceBlob, new BlockBlobStorageResourceOptions()
{
DestinationConditions = new BlobRequestConditions(){ LeaseId = "xyz" }
}),
destinationResource: new LocalFileStorageResource(downloadPath2));
开始目录上传
// Create simple transfer directory upload job which uploads the directory and the contents of that directory
DataTransfer dataTransfer = await transferManager.StartTransferAsync(
sourceResource: new LocalDirectoryStorageResourceContainer(sourcePath),
destinationResource: new BlobStorageResourceContainer(
container,
new BlobStorageResourceContainerOptions() { DirectoryPrefix = "sample-directory2" }),
transferOptions: options);
开始目录下载
DataTransfer downloadDirectoryJobId2 = await transferManager.StartTransferAsync(
sourceDirectory2,
destinationDirectory2);
传输管理器选项的简单记录器示例
// Create BlobTransferManager with event handler in Options bag
TransferManagerOptions options = new TransferManagerOptions();
TransferOptions transferOptions = new TransferOptions();
transferOptions.SingleTransferCompleted += (SingleTransferCompletedEventArgs args) =>
{
using (StreamWriter logStream = File.AppendText(logFile))
{
logStream.WriteLine($"File Completed Transfer: {args.SourceResource.Path}");
}
return Task.CompletedTask;
};
容器传输选项的简单失败事件委派
transferOptions.TransferFailed += (TransferFailedEventArgs args) =>
{
using (StreamWriter logStream = File.AppendText(logFile))
{
// Specifying specific resources that failed, since its a directory transfer
// maybe only one file failed out of many
logStream.WriteLine($"Exception occured with TransferId: {args.TransferId}," +
$"Source Resource: {args.SourceResource.Path}, +" +
$"Destination Resource: {args.DestinationResource.Path}," +
$"Exception Message: {args.Exception.Message}");
}
return Task.CompletedTask;
};
疑难解答
所有 Azure 存储服务都将引发 RequestFailedException 和有用的 ErrorCode
。
后续步骤
Blob DataMovement 示例入门。
供稿
有关生成、测试和参与这些库的详细信息,请参阅 存储 CONTRIBUTING.md 。
本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com。
此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。