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

如何在Razor Pages内网应用中实现服务器PDF文件的本地指定目录下载?

实现方案

由于浏览器的安全限制,无法直接指定用户本地的保存目录,最优方案是将两个PDF打包为ZIP文件,让用户下载后自行解压到目标目录,具体实现如下:

1. 后端(C#):实现ZIP生成与下载接口

在对应Razor页面的后台代码(如YourPage.cshtml.cs)中添加以下逻辑:

首先注入IWebHostEnvironment以获取wwwroot路径:

private readonly IWebHostEnvironment _webHostEnvironment;

public YourPageModel(IWebHostEnvironment webHostEnvironment)
{
    _webHostEnvironment = webHostEnvironment;
}

然后添加下载处理方法:

public IActionResult OnGetDownloadDocuments()
{
    // 定位到服务器上的PDF存储目录
    var pdfDirectory = Path.Combine(_webHostEnvironment.WebRootPath, "filledpdffiles");
    // 要打包的目标文件名(注意和服务器上的文件名完全匹配,包括空格、大小写)
    var targetFiles = new[] { "confidentiality Statement.pdf", "Package 2022.pdf" };

    using var memoryStream = new MemoryStream();
    // 创建ZIP压缩包
    using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    {
        foreach (var fileName in targetFiles)
        {
            var filePath = Path.Combine(pdfDirectory, fileName);
            if (System.IO.File.Exists(filePath))
            {
                var zipEntry = zipArchive.CreateEntry(fileName);
                using var entryStream = zipEntry.Open();
                using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                fileStream.CopyTo(entryStream);
            }
        }
    }

    memoryStream.Position = 0;
    // 返回ZIP文件供用户下载
    return File(memoryStream, "application/zip", "Confidential_Documents.zip");
}

2. 前端(Razor页面):添加下载按钮

在对应的.cshtml页面中添加触发下载的按钮,可选择两种方式:

方式一:直接跳转触发下载

<button onclick="window.location.href='?handler=DownloadDocuments'" class="btn btn-primary">
    下载文件包
</button>

方式二:异步请求(更友好的交互)

<button id="downloadBtn" class="btn btn-primary">下载文件包</button>

<script>
document.getElementById('downloadBtn').addEventListener('click', async () => {
    try {
        const response = await fetch('?handler=DownloadDocuments');
        if (!response.ok) throw new Error('下载失败');
        
        const blob = await response.blob();
        const downloadUrl = window.URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = downloadUrl;
        link.download = 'Confidential_Documents.zip';
        document.body.appendChild(link);
        link.click();
        
        window.URL.revokeObjectURL(downloadUrl);
        document.body.removeChild(link);
    } catch (err) {
        alert(err.message);
    }
});
</script>

3. 关键注意事项

  • 确保服务器上wwwroot/filledpdffiles目录存在,且两个PDF文件的文件名(包括空格、大小写)与代码中完全一致,避免找不到文件。
  • 配置服务器权限,确保应用程序池账号拥有读取filledpdffiles目录的权限。
  • 内网环境下无需额外处理跨域,但需保证用户能访问到服务器的静态文件目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:07:51