Visual Studio 2022 C#连接Azure Blob/文件共享存储并复制文件求助
实现Azure Blob存储与文件共享存储的文件复制(C# + VS2022)
前置准备
- 安装NuGet包:
Azure.Storage.Blobs和Azure.Storage.Files.Shares,直接在VS的NuGet包管理器中搜索安装即可。 - 获取Azure存储账户的连接字符串:在Azure门户的存储账户“访问密钥”页面复制其中一个连接字符串。
具体实现步骤
1. 初始化存储客户端
用存储连接字符串分别实例化BlobServiceClient和ShareServiceClient,用于操作Blob容器与文件共享。
2. 读取Blob文件内容
定位到目标Blob资源,将其内容下载到内存流中。
3. 写入文件共享
定位到文件共享的目标目录与文件,将读取到的流内容写入。
4. 异常与资源处理
确保流和客户端资源正确释放,捕获存储操作可能出现的异常(如权限不足、资源不存在等)。
完整代码示例
using Azure.Storage.Blobs; using Azure.Storage.Files.Shares; using System.IO; namespace AzureStorageCopyDemo { class Program { static async Task Main(string[] args) { // 替换为你的存储账户连接字符串 string storageConnectionString = "你的存储账户连接字符串"; // Blob配置:容器名称、目标Blob路径 string blobContainerName = "sample-container"; string blobFilePath = "source-files/report.xlsx"; // 文件共享配置:共享名称、目标文件路径 string fileShareName = "sample-share"; string targetFilePath = "backup-files/report.xlsx"; try { // 初始化Blob客户端 BlobServiceClient blobService = new BlobServiceClient(storageConnectionString); BlobContainerClient blobContainer = blobService.GetBlobContainerClient(blobContainerName); BlobClient blobClient = blobContainer.GetBlobClient(blobFilePath); // 检查Blob是否存在 if (!await blobClient.ExistsAsync()) { Console.WriteLine("指定的Blob文件不存在"); return; } // 初始化文件共享客户端 ShareServiceClient shareService = new ShareServiceClient(storageConnectionString); ShareClient shareClient = shareService.GetShareClient(fileShareName); // 检查文件共享是否存在 if (!await shareClient.ExistsAsync()) { Console.WriteLine("指定的文件共享不存在"); return; } // 创建目标目录(若不存在) string directoryPath = Path.GetDirectoryName(targetFilePath); ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient(directoryPath); await directoryClient.CreateIfNotExistsAsync(); // 获取目标文件客户端 ShareFileClient fileClient = directoryClient.GetFileClient(Path.GetFileName(targetFilePath)); // 下载Blob内容到流并写入文件共享 using (MemoryStream stream = new MemoryStream()) { await blobClient.DownloadToAsync(stream); stream.Position = 0; // 重置流指针到起始位置 await fileClient.CreateAsync(stream.Length); await fileClient.UploadAsync(stream); } Console.WriteLine("文件从Blob存储复制到文件共享成功!"); } catch (Exception ex) { Console.WriteLine($"复制失败:{ex.Message}"); } } } }
注意事项
- 确保存储账户权限允许Blob读取和文件共享写入操作,生产环境推荐使用Azure AD身份验证替代存储账户密钥。
- 大文件复制建议采用分块上传/下载方式,避免内存占用过高,可参考官方SDK的分块操作API实现。
- 测试前需提前创建好Blob容器、待复制的Blob文件、文件共享,避免因资源不存在报错。
内容的提问来源于stack exchange,提问作者Michael 7
相关产品推荐
相关产品推荐

