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

从Razor Page上传文件至Azure文件共享的问题求助

解决Razor Page上传文件到Azure存储的问题及实现示例

错误原因说明

你遇到的CloudStorageAccount不存在的问题,是因为该类属于旧版Azure Storage SDK(Microsoft.Azure.Storage.*系列包),这类包在.NET Core 2.2环境下兼容性差,且微软已不再推荐使用。现在针对.NET Core环境,官方推荐使用新版的Azure.Storage.Blobs(Blob存储)和Azure.Storage.Files.Shares(文件共享)SDK,以下是完整实现步骤。


上传到Azure Blob存储的实现

1. 安装兼容的NuGet包

在Visual Studio的包管理器控制台执行:

Install-Package Azure.Storage.Blobs -Version 12.14.0

(注:12.14.0版本兼容.NET Core 2.2,更高版本仅支持.NET Core 3.1+)

2. 配置存储连接字符串

在appsettings.json中添加Azure存储账户的连接字符串:

{
  "AzureStorage": {
    "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=你的存储账户名;AccountKey=你的存储账户密钥;EndpointSuffix=core.windows.net"
  }
}

3. Razor Page后端代码(示例:UploadToBlob.cshtml.cs)

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration;
using Azure.Storage.Blobs;
using System.IO;
using System.Threading.Tasks;

namespace YourProjectNamespace.Pages
{
    public class UploadToBlobModel : PageModel
    {
        private readonly IConfiguration _config;

        public UploadToBlobModel(IConfiguration config)
        {
            _config = config;
        }

        [BindProperty]
        public IFormFile UploadedFile { get; set; }

        public async Task<IActionResult> OnPostAsync()
        {
            if (UploadedFile == null || UploadedFile.Length == 0)
            {
                ModelState.AddModelError("", "请选择要上传的文件");
                return Page();
            }

            // 获取连接字符串与容器名称
            string connStr = _config["AzureStorage:ConnectionString"];
            string containerName = "你的blob容器名"; // 需提前在Azure门户创建

            // 初始化Blob客户端
            BlobServiceClient blobServiceClient = new BlobServiceClient(connStr);
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            BlobClient blobClient = containerClient.GetBlobClient(UploadedFile.FileName);

            // 上传文件流
            using (var stream = UploadedFile.OpenReadStream())
            {
                await blobClient.UploadAsync(stream, overwrite: true);
            }

            return RedirectToPage("/UploadSuccess"); // 跳转至自定义成功页面
        }
    }
}

4. Razor Page前端代码(UploadToBlob.cshtml)

@page
@model YourProjectNamespace.Pages.UploadToBlobModel

<h1>上传文件到Azure Blob存储</h1>

<form method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label>选择文件</label>
        <input type="file" asp-for="UploadedFile" class="form-control" />
        <span asp-validation-for="UploadedFile" class="text-danger"></span>
    </div>
    <button type="submit" class="btn btn-primary">开始上传</button>
</form>

上传到Azure文件共享的实现

1. 安装兼容的NuGet包

在包管理器控制台执行:

Install-Package Azure.Storage.Files.Shares -Version 12.12.0

2. 配置连接字符串

复用上述appsettings.json中的AzureStorage:ConnectionString配置即可。

3. Razor Page后端代码(示例:UploadToFileShare.cshtml.cs)

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration;
using Azure.Storage.Files.Shares;
using System.IO;
using System.Threading.Tasks;

namespace YourProjectNamespace.Pages
{
    public class UploadToFileShareModel : PageModel
    {
        private readonly IConfiguration _config;

        public UploadToFileShareModel(IConfiguration config)
        {
            _config = config;
        }

        [BindProperty]
        public IFormFile UploadedFile { get; set; }

        public async Task<IActionResult> OnPostAsync()
        {
            if (UploadedFile == null || UploadedFile.Length == 0)
            {
                ModelState.AddModelError("", "请选择要上传的文件");
                return Page();
            }

            string connStr = _config["AzureStorage:ConnectionString"];
            string shareName = "你的文件共享名"; // 需提前在Azure门户创建
            string directoryName = "uploaded-files"; // 可选,自动创建不存在的目录

            // 初始化文件共享客户端
            ShareServiceClient shareServiceClient = new ShareServiceClient(connStr);
            ShareClient shareClient = shareServiceClient.GetShareClient(shareName);
            ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient(directoryName);
            await directoryClient.CreateIfNotExistsAsync();

            // 上传文件
            ShareFileClient fileClient = directoryClient.GetFileClient(UploadedFile.FileName);
            using (var stream = UploadedFile.OpenReadStream())
            {
                await fileClient.UploadAsync(stream, overwrite: true);
            }

            return RedirectToPage("/UploadSuccess");
        }
    }
}

4. Razor Page前端代码(UploadToFileShare.cshtml)

@page
@model YourProjectNamespace.Pages.UploadToFileShareModel

<h1>上传文件到Azure文件共享</h1>

<form method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label>选择文件</label>
        <input type="file" asp-for="UploadedFile" class="form-control" />
        <span asp-validation-for="UploadedFile" class="text-danger"></span>
    </div>
    <button type="submit" class="btn btn-primary">开始上传</button>
</form>

注意事项

  • 确保Azure存储账户已提前创建对应的Blob容器或文件共享
  • 若上传大文件,可参考官方文档实现分块上传逻辑
  • 测试时需保证应用能正常访问Azure存储服务(防火墙规则需允许)

内容的提问来源于stack exchange,提问作者Michael 7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:40:44