本来项目中用的好好的FTP下载传输,不知道从什么时候开始读取不到了,也上传不了。实际读取的是本地缓存的。因为同事上传不了文件和图片才发现。上源码!
#region 下载文件 static byte[] DownloadFile(string downPath) { byte[] outBuffs; using (FtpClient conn = new FtpClient("ftp://" + ServerPath + "/", remoteUser, remotePass))//serverPath是服务器ip 无端口。FTP用户,FTP密码 { conn.Connect();//开启连接
//conn.DataConnectionType = FtpDataConnectionType.PORT;//主动模式
//conn.DataConnectionType = FtpDataConnectionType.PASV;//被动模式
bool flag = conn.Download(out outBuffs, downPath); //downPath数据“/Upload/Img/234678.jpg” //这里报错,未将对象引用到对象实例
}
return outBuffs;
}
#endregion
解决:
1、下载FluentFTP源码,几经调试。发现是FTP被动连接报425错误。
2、FTP425错误出现的可能原因有多种,我个菜鸡就不清楚了(自行百度)
3、我这里是因为服务器可能没设置端口范围,可能服务器自动开的端口冲突了(重启就行了,不过也是临时的,下次还是会出现。还是要设置下端口范围以避免此类情况)
4、FluentFTP默认为不支持IPV6的被动模式。设置模式DataConnectionType
FluentFTP,指定连接模式:DataConnectionType
DataConnectionType=FtpDataConnectionType.PORT;//主动模式
DataConnectionType=FtpDataConnectionType.PASV;//被动模式
DataConnectionType=FtpDataConnectionType.AutoPassive;//默认被动模式。这种类型的数据连接尝试使用 EPSV 命令,如果服务器不支持 EPSV,它会在放弃之前回退到 PASV 命令,除非您通过 IPv6 连接,在这种情况下不支持 PASV 命令。