Asp.net Core下Windows主机与Linux无应用文件服务器下载链接实现问询
解决Web主机从无应用的Linux文件服务器提供PDF下载的方案
方案1:挂载Linux共享目录到Windows Web主机
利用Samba协议把Linux上的PDF目录共享出来,Windows主机挂载后,Asp.net Core就能像访问本地文件一样读取,再生成下载链接。
- 操作步骤:
- 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
- 安装Samba:
- Windows Web主机挂载共享:
- 打开「此电脑」,右键选「映射网络驱动器」,输入
\\zzz.xxx.sth\pdf-files,填入Samba账号密码,勾选「登录时重新连接」。
- 打开「此电脑」,右键选「映射网络驱动器」,输入
- 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); }
- Linux端配置Samba共享:
方案2:通过SFTP直接读取Linux文件
借助SSH自带的SFTP功能,Asp.net Core直接连接Linux服务器拉取文件,不用挂载目录,也不用在Linux上装额外应用。
- 操作步骤:
- 确认Linux的SSH服务正常运行:
sudo systemctl status sshd,没启动的话执行sudo systemctl start sshd - 给Asp.net Core项目装SFTP客户端库,比如SSH.NET:
Install-Package SSH.NET - 编写下载接口代码:
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); }
- 确认Linux的SSH服务正常运行:
方案3:用NFS挂载(跨平台可选)
如果偏好NFS协议,Windows主机需要先装NFS客户端组件:
- 操作步骤:
- 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
- 安装NFS服务:
- Windows端安装NFS客户端:
- 打开「控制面板」→「程序和功能」→「启用或关闭Windows功能」,勾选「NFS客户端」,安装后重启主机。
- 挂载NFS共享:
- 命令行执行:
mount -o anon \\zzz.xxx.sth\实际\pdf文件存储路径 Z:
- 命令行执行:
- Asp.net Core代码和方案1一致,直接访问挂载的驱动器路径即可。
- Linux端配置NFS共享:
内容的提问来源于stack exchange,提问作者Behtash
相关产品推荐
相关产品推荐

