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

ASP.NET Core如何将文件复制到共享文件夹及跨服务器实现方案

针对Windows文件服务器的程序化实现方案

1. SMB协议+身份验证方案

方式一:基于Kerberos的身份模拟

如果你的Debian服务器已加入Windows域或配置了Kerberos信任,可以使用Windows身份模拟来访问共享文件夹:

using System.Security.Principal;
using System.IO;

// 通过Kerberos获取有权访问Windows共享的用户令牌
var userToken = ...; 
WindowsIdentity.RunImpersonated(userToken, () =>
{
    // Windows共享路径格式:\\服务器IP\共享名\文件名
    var networkPath = @"\\192.168.1.100\ImageShare\" + uniqueFileName;
    using (var networkStream = new FileStream(networkPath, FileMode.Create))
    {
        file.CopyTo(networkStream);
    }
});

注意:需要在Debian上配置Kerberos客户端,确保能和Windows域控完成身份验证,否则无法获取有效令牌。

方式二:第三方SMB客户端库

如果域环境配置复杂,推荐使用无需系统级依赖的SMB客户端库,比如SharpCifs.Std:

  1. 安装NuGet包:Install-Package SharpCifs.Std
  2. 编写上传代码:
using SharpCifs.Smb;

// 拼接SMB访问地址,包含账号密码
var smbUrl = $"smb://{用户名}:{密码}@{服务器IP}/共享名/{uniqueFileName}";
var smbFile = new SmbFile(smbUrl);
using (var outputStream = smbFile.GetOutputStream())
{
    file.CopyTo(outputStream);
}

这种方式无需域环境支持,直接在代码中传入Windows共享的凭据即可,适合Linux环境下跨系统访问。

2. 其他备选方案

  • REST API中转:在Windows文件服务器上部署一个简单的文件接收API,Debian端上传完成后,再以Multipart/form-data格式将文件POST到Windows的API,避开SMB权限问题。
  • FTP/SFTP上传:如果Windows服务器开启了FTP或SFTP服务,可使用.NET自带的FtpWebRequest或第三方库SSH.NET实现文件上传,配置和实现都更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:24:55