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

如何在C#/ASP.NET中编程下载Azure文件存储的PDF文档?

从Azure文件存储下载PDF的实现方案(C#/ASP.NET)

当然可以实现从Azure文件存储账户下载PDF文档!我来给你梳理清楚具体的实现步骤,适配你C#/ASP.NET + Azure Web App的场景:

1. 先升级到官方推荐的存储SDK

你之前用的Microsoft.Azure命名空间属于旧版存储SDK,它的能力比较有限,只支持元数据(比如目录、文件路径)的查询。现在官方推荐使用Azure.Storage.Files.Shares这个NuGet包,它提供了完整的文件操作能力,包括下载内容。

安装这个包的命令:

# NuGet包管理器控制台
Install-Package Azure.Storage.Files.Shares

# 或者.NET CLI
dotnet add package Azure.Storage.Files.Shares

2. 核心代码实现

根据你的Web App场景,我提供两种常用的实现方式:

方式一:把PDF下载到Web App临时目录(用于后续处理)

using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;
using System.IO;

public async Task DownloadPdfToTempFolder(string shareName, string directoryPath, string fileName)
{
    // 替换为你的Azure文件存储连接字符串,可从Azure门户的存储账户"访问密钥"页面获取
    string storageConnectionString = "你的存储账户连接字符串";

    // 初始化文件存储客户端
    ShareClient shareClient = new ShareClient(storageConnectionString, shareName);
    await shareClient.CreateIfNotExistsAsync(); // 如果共享不存在则创建

    // 定位到目标目录和文件
    ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient(directoryPath);
    ShareFileClient fileClient = directoryClient.GetFileClient(fileName);

    // 检查文件是否存在
    if (await fileClient.ExistsAsync())
    {
        // Web App的临时目录可以用Path.GetTempPath(),避免权限问题
        string localTempPath = Path.Combine(Path.GetTempPath(), fileName);
        await fileClient.DownloadToAsync(localTempPath);

        // 这里可以添加对PDF文件的后续处理逻辑,比如读取内容、转存等
    }
    else
    {
        throw new FileNotFoundException("指定的PDF文件不存在于Azure文件存储中");
    }
}

方式二:直接将PDF输出到浏览器(供用户下载)

如果是在ASP.NET Controller中,直接把文件流返回给前端,让用户可以直接下载:

using Microsoft.AspNetCore.Mvc;
using Azure.Storage.Files.Shares;

public async Task<IActionResult> DownloadPdfForUser(string shareName, string directoryPath, string fileName)
{
    string storageConnectionString = "你的存储账户连接字符串";
    ShareClient shareClient = new ShareClient(storageConnectionString, shareName);
    ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient(directoryPath);
    ShareFileClient fileClient = directoryClient.GetFileClient(fileName);

    if (!await fileClient.ExistsAsync())
    {
        return NotFound("要下载的PDF文件不存在");
    }

    // 打开文件读取流
    var pdfStream = await fileClient.OpenReadAsync();
    // 返回文件流,设置正确的Content-Type让浏览器识别为PDF
    return File(pdfStream, "application/pdf", fileName);
}

3. 关键权限配置

  • 连接字符串权限:确保你使用的存储账户连接字符串拥有读取文件的权限(默认的账户密钥连接字符串具备全权限,测试阶段可以直接用)
  • 网络访问权限:如果你的存储账户设置了防火墙,需要允许Azure Web App的IP地址访问,或者在存储账户的防火墙设置中勾选“允许受信任的Azure服务访问此存储账户”
  • IAM权限(可选):如果不用连接字符串,而是用Azure AD身份验证,需要给Web App的托管标识分配“存储文件数据读取者”角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:28