首页 > 其他分享 >【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob

【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob

时间:2023-01-19 15:45:15浏览次数:58  
标签:文件 传大 示例 Storage WindowsAzure Blob Azure 上传

问题描述

在使用Azure的存储服务时候,如果上传的文件大于了100MB, 1GB的情况下,如何上传呢?

 

问题解答

使用Azure存储服务时,如果要上传文件到Azure Blob,有很多种工具可以实现。如:Azure 门户, Azure Storage Explorer, 命令行工具 az copy等。

如果使用SDK,通过自定义代码上传的时,需要主要大文件上传时候需要考虑的问题。 Azure Blob支持两种上传方式:整体上传和分块上传

  • 整块上传:当上传到块 Blob 的文件小于等于 SingleBlobUploadThresholdInBytes 属性(客户端可以通过设置该属性设置单个 Blob 上传的最大值,范围介于 1MB 和 256MB 之间)的值时,则可以采用整体上传的方式。

  • 分块上传:当上传的块 Blob 的文件大于 SingleBlobUploadThresholdInBytes 属性的值时,存储客户端会根据 StreamWriteSizeInBytes (客户端可以通过设置该属性设置单个分块 Blob 的大小,范围介于 16KB 和 100MB 之间) 的值将文件分解成块, 采用分块上传的方式上传文件。

 

如下示例,就是使用.NET7.0创建的示例代码:

1) 在VS Code中,使用 dotnet new console 创建一个空的控制台项目

dotnet new console --framework net7.0

2)添加 Microsoft.WindowsAzure.Storage 引用

dotnet add package WindowsAzure.Storage --version 9.3.3

4)修改 Program.cs 代码

// See https://aka.ms/new-console-template for more information
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.RetryPolicies;

Console.WriteLine("Hello, World!");


TimeSpan backOffPeriod = TimeSpan.FromSeconds(2);
int retryCount = 1;
//设置请求选项
BlobRequestOptions requestoptions = new BlobRequestOptions()
{
    SingleBlobUploadThresholdInBytes = 1024 * 1024 * 10, //10MB
    ParallelOperationThreadCount = 12,
    RetryPolicy = new ExponentialRetry(backOffPeriod, retryCount),
};

//String storageConnectionString = System.Environment.GetEnvironmentVariable("StorageConnectionString", EnvironmentVariableTarget.User);
//Console.WriteLine("String account string : "+storageConnectionString);
String storageConnectionString ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
CloudBlobClient blobclient = account.CreateCloudBlobClient();
//设置客户端默认请求选项
blobclient.DefaultRequestOptions = requestoptions;
CloudBlobContainer blobcontainer = blobclient.GetContainerReference("uploadfiles-123");


await blobcontainer.CreateIfNotExistsAsync();
//文件路径,文件大小 117MB
string sourcePath = @"C:\WorkSpace\ETW\1.20211017.060119_000001.etl";
CloudBlockBlob blockblob = blobcontainer.GetBlockBlobReference("bigfiles");
//设置单个块 Blob 的大小(分块方式)
blockblob.StreamWriteSizeInBytes = 1024 * 1024 * 5;
try
{
    Console.WriteLine("uploading");
    //使用 Stopwatch 查看上传时间
    var timer = System.Diagnostics.Stopwatch.StartNew();
    using (var filestream = System.IO.File.OpenRead(sourcePath))
    {
        await blockblob.UploadFromStreamAsync(filestream);
    }
    timer.Stop();

    Console.WriteLine(timer.ElapsedMilliseconds);

    Console.WriteLine("Upload Successful, Time:" + timer.ElapsedMilliseconds);
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

5) 代码完成。如果在Azure存储账号中开启了诊断日志,当上传大文件后,就可以通过日志分析出,以上代码执行了多次Upload操作以完成大文件的上传!

 

 

参考资料

上传大文件到 Azure 存储块 Blob:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/storage/aog-storage-blob-howto-upload-big-file-to-storage

WindowsAzure.Storage : https://www.nuget.org/packages/WindowsAzure.Storage/

Tutorial: Create a .NET console application using Visual Studio Code : https://learn.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-7-0

 

标签:文件,传大,示例,Storage,WindowsAzure,Blob,Azure,上传
From: https://www.cnblogs.com/lulight/p/17061631.html

相关文章

  • Spring远程处理(通过Hessian示例)
    借助于 HessianServiceExporter 和 HessianProxyFactoryBean 类,我们可以实现hessian提供的远程服务。Hessian的优势Hessian在整个防火墙上都能很好地工作。Hessian......
  • Spring远程处理(通过Burlap示例)
    Houssian和Burlap均由Coucho提供。借助于 BurlapServiceExporter 和 BurlapProxyFactoryBean 类,我们可以实现burlap提供的远程服务。Burlap的示例与Burlap相同,您只需......
  • Spring通过HTTP调用程序进行远程处理示例
    基于Web的客户端在上面给出的示例中,我们使用了基于控制台的客户端。我们也可以使用基于Web的客户端。您需要创建3个其他文件。在这里,我们使用以下文件:ClientInvoker.jav......
  • Spring MVC Tiles示例
    Spring提供了与apachetile框架的集成支持。因此,我们可以借助SpringTile支持简单地管理SpringMVC应用程序的布局。SpringMVC支持Tiles的优势SpringMVCTiles示例1、......
  • 性能测试指标推算及压测示例
    性能测试指标推算及压测示例根据提测范围、业务需求推算性能需求和指标(如事务数、并发数等),然后写脚本时可根据此模拟线程数和约束条件,最后执行压测、监控服务器资源、分析......
  • Spring MVC文件上传示例
    SpringMVC提供了一种上传文件的简便方法,它可以是图像或其他文件。让我们看一个使用SpringMVC上传文件的简单示例。必需的Jar文件要运行此示例,您需要加载:SpringCore......
  • Spring MVC分页示例
    分页用于在不同部分显示大量记录。在这种情况下,我们将在一页中显示10、20或50条记录。对于其余记录,我们提供链接。我们可以在SpringMVC中简单地创建分页示例。在此分......
  • 【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
    问题描述使用6379端口连接AzureRedis服务,连接失败。因为默认情况下AzureRedis的设置没有打开6379的端口。需要使用SSL(6380端口)进行连接,但是遇见了无法连接的问题。使......
  • Spring MVC CRUD示例
    CRUD(创建,读取,更新和删除)应用程序是用于创建任何项目的最重要的应用程序。它提供了开发大型项目的想法。在SpringMVC中,我们可以开发一个简单的CRUD应用程序。在这里,我......
  • MeterSphere服务集成之对接 Azure Devops
    1.对接AzureDevops配置1.1配置AzureDevops 配置信息中 PersonalAccessTokens和 Azure组织ID来自AzureDevops平台如下位置。问题类型和需求类型来自 Azure......