从Razor Page上传至Azure File Share的示例求助
我完全懂你的困扰——搜了一堆都是Blob存储的示例,却找不到适配Azure File Share的Razor Page上传方案,对吧?下面就给你一步步实现,完美适配你的VS2017和.NET Core 2.0环境:
1. 安装必要的NuGet包
首先得装Azure File Share的SDK包,.NET Core 2.0对应的是Microsoft.Azure.Storage.File,你可以通过VS的NuGet包管理器搜索安装,或者在Package Manager Console里执行:
Install-Package Microsoft.Azure.Storage.File -Version 11.1.7
(这个版本是兼容.NET Core 2.0的最新稳定版)
2. 配置Azure连接信息
在你的appsettings.json里添加Azure File Share的连接字符串和共享名称:
{ "AzureFileStorage": { "ConnectionString": "你的Azure存储账户连接字符串", "ShareName": "你的文件共享名称" } }
3. 编写Razor Page前端(Upload.cshtml)
创建一个新的Razor Page(比如命名为Upload),写一个支持文件上传的表单:
@page @model UploadModel @{ ViewData["Title"] = "上传文件到Azure File Share"; } <h1>@ViewData["Title"]</h1> @if (!string.IsNullOrEmpty(Model.Message)) { <div class="alert alert-success">@Model.Message</div> } <form method="post" enctype="multipart/form-data"> <div class="form-group"> <label>选择要上传的文件</label> <input type="file" name="file" class="form-control" /> </div> <button type="submit" class="btn btn-primary">上传</button> </form>
4. 编写后台处理逻辑(Upload.cshtml.cs)
在后台代码里处理文件上传,连接Azure File Share并保存文件:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Azure.Storage; using Microsoft.Azure.Storage.File; using Microsoft.Extensions.Configuration; using System.IO; using System.Threading.Tasks; namespace YourNamespace.Pages { public class UploadModel : PageModel { private readonly IConfiguration _configuration; public UploadModel(IConfiguration configuration) { _configuration = configuration; } [TempData] public string Message { get; set; } public void OnGet() { } public async Task<IActionResult> OnPostAsync(IFormFile file) { if (file == null || file.Length == 0) { Message = "请选择要上传的文件"; return Page(); } try { // 从配置获取连接信息 var connectionString = _configuration["AzureFileStorage:ConnectionString"]; var shareName = _configuration["AzureFileStorage:ShareName"]; // 连接到Azure存储账户 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); CloudFileShare share = fileClient.GetShareReference(shareName); // 确保文件共享存在 if (!await share.ExistsAsync()) { await share.CreateAsync(); } // 获取根目录(也可以指定子目录,比如share.GetRootDirectoryReference().GetDirectoryReference("subfolder")) CloudFileDirectory rootDir = share.GetRootDirectoryReference(); // 创建文件客户端,用原文件名 CloudFile cloudFile = rootDir.GetFileReference(file.FileName); // 上传文件流 using (var stream = file.OpenReadStream()) { await cloudFile.UploadFromStreamAsync(stream); } Message = $"文件 {file.FileName} 上传成功!"; } catch (System.Exception ex) { Message = $"上传失败:{ex.Message}"; } return Page(); } } }
额外注意事项
- 确保你的Azure存储账户有足够的读写权限(比如用存储账户密钥访问)
- 如果要上传大文件,记得在
web.config里调整上传大小限制:
同时在Startup.cs的<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="52428800" /> <!-- 50MB --> </requestFiltering> </security> </system.webServer>ConfigureServices里添加:services.Configure<Microsoft.AspNetCore.Http.Features.FormOptions>(options => { options.MultipartBodyLengthLimit = 52428800; // 50MB }); - 可以根据需求修改文件保存路径(比如创建子目录),或者重命名文件避免重名冲突
内容的提问来源于stack exchange,提问作者E. Meyers
相关产品推荐
相关产品推荐

