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

Asp.net Core下Windows主机与Linux无应用文件服务器下载链接实现问询

解决Web主机从无应用的Linux文件服务器提供PDF下载的方案

方案1:挂载Linux共享目录到Windows Web主机

利用Samba协议把Linux上的PDF目录共享出来,Windows主机挂载后,Asp.net Core就能像访问本地文件一样读取,再生成下载链接。

  • 操作步骤:
    1. Linux端配置Samba共享:
      • 安装Samba:sudo apt install samba(Debian/Ubuntu系)
      • 编辑/etc/samba/smb.conf,添加以下配置(替换实际路径和用户):
        [pdf-files]
        path = /实际/pdf文件存储路径
        browseable = yes
        read only = yes
        valid users = 你的samba用户名
        
      • 创建Samba用户并设置密码:sudo smbpasswd -a 你的samba用户名
      • 重启Samba服务:sudo systemctl restart smbd
    2. Windows Web主机挂载共享:
      • 打开「此电脑」,右键选「映射网络驱动器」,输入\\zzz.xxx.sth\pdf-files,填入Samba账号密码,勾选「登录时重新连接」。
    3. Asp.net Core中返回文件:
      [HttpGet("download/{fileName}")]
      public IActionResult Download(string fileName)
      {
          // Z:是你挂载的驱动器号,替换成实际的
          var filePath = Path.Combine(@"Z:\", fileName);
          if (!System.IO.File.Exists(filePath))
              return NotFound();
          return PhysicalFile(filePath, "application/pdf", fileName);
      }
      

方案2:通过SFTP直接读取Linux文件

借助SSH自带的SFTP功能,Asp.net Core直接连接Linux服务器拉取文件,不用挂载目录,也不用在Linux上装额外应用。

  • 操作步骤:
    1. 确认Linux的SSH服务正常运行:sudo systemctl status sshd,没启动的话执行sudo systemctl start sshd
    2. 给Asp.net Core项目装SFTP客户端库,比如SSH.NET:
      Install-Package SSH.NET
      
    3. 编写下载接口代码:
      using Renci.SshNet;
      using Renci.SshNet.Sftp;
      
      [HttpGet("download/{fileName}")]
      public async Task<IActionResult> Download(string fileName)
      {
          var remotePath = $"/实际/pdf文件存储路径/{fileName}";
          // 生产环境别硬编码账号密码,用配置文件或密钥登录更安全
          using var sftpClient = new SftpClient("zzz.xxx.sth", "ssh用户名", "ssh密码");
          sftpClient.Connect();
          
          if (!sftpClient.Exists(remotePath))
          {
              sftpClient.Disconnect();
              return NotFound();
          }
      
          var ms = new MemoryStream();
          sftpClient.DownloadFile(remotePath, ms);
          sftpClient.Disconnect();
          
          ms.Position = 0;
          return File(ms, "application/pdf", fileName);
      }
      

方案3:用NFS挂载(跨平台可选)

如果偏好NFS协议,Windows主机需要先装NFS客户端组件:

  • 操作步骤:
    1. Linux端配置NFS共享:
      • 安装NFS服务:sudo apt install nfs-kernel-server
      • 编辑/etc/exports,添加(允许Web主机访问):
        /实际/pdf文件存储路径 xxx.sth(rw,sync,no_subtree_check)
        
      • 导出共享:sudo exportfs -a
      • 重启NFS服务:sudo systemctl restart nfs-kernel-server
    2. Windows端安装NFS客户端:
      • 打开「控制面板」→「程序和功能」→「启用或关闭Windows功能」,勾选「NFS客户端」,安装后重启主机。
    3. 挂载NFS共享:
      • 命令行执行:mount -o anon \\zzz.xxx.sth\实际\pdf文件存储路径 Z:
    4. Asp.net Core代码和方案1一致,直接访问挂载的驱动器路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:30:15