使用FtpWebRequest上传文件出了这个错误 无奈本机又无法调试获取具体的错误
手上只有关于这个错误的 描述如下:
应 PASV 命令的请求,服务器返回了一个与 FTP 连接地址不同的地址。
如何才能排除这个错误? p.s:FTP服务器(FileZilla Server)上设置的是被动模式 客户端与FTP服务器为不同网段具体上传代码如下: FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpUrl + newFileName);
request.UseBinary = true;
request.Credentials = new NetworkCredential(FtpUid, FtpPwd);
request.KeepAlive = false;
request.EnableSsl = false;
request.UsePassive = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.ContentLength = finfo.Length;
byte[] buff = new byte[2048];
FileStream fs = finfo.OpenRead();
Stream reqStream = request.GetRequestStream(); cfile.PrograssMin = 0;
cfile.PrograssMax = (int)(finfo.Length / 2048);
if (cfile.PrograssMax == 0)
{
cfile.PrograssMax = 1;
} int contentlen = fs.Read(buff, 0, buff.Length);
int i = 0;
while (contentlen > 0)
{
reqStream.Write(buff, 0, buff.Length);
contentlen = fs.Read(buff, 0, buff.Length);
i++;
cfile.PrograssValue= i;
}
reqStream.Flush();
reqStream.Close();
fs.Close();
手上只有关于这个错误的 描述如下:
应 PASV 命令的请求,服务器返回了一个与 FTP 连接地址不同的地址。
如何才能排除这个错误? p.s:FTP服务器(FileZilla Server)上设置的是被动模式 客户端与FTP服务器为不同网段具体上传代码如下: FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpUrl + newFileName);
request.UseBinary = true;
request.Credentials = new NetworkCredential(FtpUid, FtpPwd);
request.KeepAlive = false;
request.EnableSsl = false;
request.UsePassive = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.ContentLength = finfo.Length;
byte[] buff = new byte[2048];
FileStream fs = finfo.OpenRead();
Stream reqStream = request.GetRequestStream(); cfile.PrograssMin = 0;
cfile.PrograssMax = (int)(finfo.Length / 2048);
if (cfile.PrograssMax == 0)
{
cfile.PrograssMax = 1;
} int contentlen = fs.Read(buff, 0, buff.Length);
int i = 0;
while (contentlen > 0)
{
reqStream.Write(buff, 0, buff.Length);
contentlen = fs.Read(buff, 0, buff.Length);
i++;
cfile.PrograssValue= i;
}
reqStream.Flush();
reqStream.Close();
fs.Close();
http://hi.csdn.net/colin3dmax
{
FileInfo fi = new FileInfo(localFile);
FileStream fs = fi.OpenRead();
long length = fs.Length;
FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://" + FtpAddress + FtpRemotePath + fi.Name);
req.Credentials = new NetworkCredential(FtpUid, FtpPwd);
req.Method = WebRequestMethods.Ftp.UploadFile;
req.UseBinary = true;
req.ContentLength = length;
req.Timeout = 10 * 1000;
try
{
Stream stream = req.GetRequestStream();
int BufferLength = 2048;
byte[] b = new byte[BufferLength];
int i;
while ((i = fs.Read(b, 0, BufferLength)) > 0)
{
stream.Write(b, 0, i);
}
stream.Close();
stream.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
2种办法可以解决一是不使用被动模式:
request.UsePassive = false; 二是修改服务器设置,被动模式的IP地址为默认,或者用指定的被动模式IP连接
比如服务器IP是192.168.0.1,被动模式IP设置为了192.168.1.1,那么,你用192.168.1.1连接,看行不行
一般都是相同地址吧,不同地址的话,很多FTP软件也搞不定的