You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Razor Page上传至Azure File Share的示例求助

Razor Page上传文件到Azure File Share(.NET Core 2.0)

我完全懂你的困扰——搜了一堆都是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里调整上传大小限制:
    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="52428800" /> <!-- 50MB -->
        </requestFiltering>
      </security>
    </system.webServer>
    
    同时在Startup.cs的ConfigureServices里添加:
    services.Configure<Microsoft.AspNetCore.Http.Features.FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 52428800; // 50MB
    });
    
  • 可以根据需求修改文件保存路径(比如创建子目录),或者重命名文件避免重名冲突

内容的提问来源于stack exchange,提问作者E. Meyers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:43:27