我们正在迁移到.netcore(2.2)和Kubernetes,并遇到了从Windows共享文件夹复制文件的情况。
Windows中的相同项目,WebClient.DownloadFile起作用。
var remotefile = "file://ipaddress/folder/file.csv";
using (var client = new WebClient ())
{
//save to local
client.DownloadFile(remotefile, "file.csv");
}
但是在Mac上使用vs时,出现错误: System.Net.WebException:找不到文件'/Volumes/Data/xxxpath/bin/Debug/netcoreapp2.2 / ** \ ipaddress \ folder \ file.csv
然后我们切换为使用Sharpcifs, 但是在获取输入流时出现其他错误 SharpCifs.Smb.SmbException:无法连接,0.0.0.0 <00> /2.xxx [1.xxx:55060-> 2.xxx:445] ---> SharpCifs.Util.Transport.TransportException:传输已关闭谈判--->
var remoteFile = new SmbFile("smb://ipaddress/folder/file.csv");
using (var inputStream = remoteFile.GetInputStream())
{
using (var outputStream = new SmbFileOutputStream(file))
{
var buf = new byte[16 * 1024 * 1024];
int len;
while ((len = inputStream.Read(buf)) > 0)
{
outputStream.Write(buf, 0, len);
}
}
}
是否还有其他选项可以从.netcore的网络共享文件夹中复制/下载文件?
---------更新-------------------
我发现上述错误是由端口引起的,因为使用的库的随机端口未在Mac上打开。我试图指定一个开放的
SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "1400");
但是它不起作用,使用的本地端口仍然是随机的。然后我将应用程序部署到k8s(所有端口都打开),“连接失败”错误消失了,但是有了新的错误:
[System.Net.Sockets.SocketException (107): Socket not connected
at System.Net.Sockets.Socket.
UpdateStatusAfterSocketErrorAndThrowException(SocketError error,
String callerName)
at System.Net.Sockets.Socket.get_RemoteEndPoint()
at SharpCifs.Smb.SmbTransport.Connect()
at SharpCifs.Smb.SmbTree.TreeConnect(ServerMessageBlock andx,
ServerMessageBlock andxResponse)
at SharpCifs.Smb.SmbFile.DoConnect()
at SharpCifs.Smb.SmbFile.Connect()
at SharpCifs.Smb.SmbFile.Connect0()
at SharpCifs.Smb.SmbFile.Open0(Int32 flags, Int32 access, Int32 attrs,
Int32 options)
at SharpCifs.Smb.SmbFile.Open(Int32 flags, Int32 access, Int32 attrs, Int32 options)
at SharpCifs.Smb.SmbFileInputStream..ctor(SmbFile file, Int32 openFlags)