我想使用FTP上传并下载文件。我设法将以下代码用于上传和下载方法。我被困在同一个地方。
如果我使用:
ftpRequest.UsePassive = false;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponseStream();
它给了我500个错误。但是,如果我只使用:
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponseStream();
我得到:远程服务器返回了一个错误:227输入被动模式。
这在下载和上传方法中都是相同的行为。我能够使用在线客户端上传文件,因此我知道服务器设置良好。作为某些线程建议,我禁用了防病毒软件的防火墙,但这也不起来。现在我不知道该怎么办。我的上传和下载方法如下:
我的上传方法
private static void Upload ()
{
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://ftp.myserver.com/");
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpRequest.UsePassive = false;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
string line = streamReader.ReadLine();
while (!string.IsNullOrEmpty(line))
{
Console.WriteLine(line);
line = streamReader.ReadLine();
}
streamReader.Close();
}
我的下载方法
FtpWebRequest reqFTP;
try
{
FileStream outputStream = new FileStream(@"C:download.csv", FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://ftp.myserver.com/upload/myfile.csv"));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.UsePassive = false;
reqFTP.KeepAlive = true;
reqFTP.Credentials = new NetworkCredential("username", "password");
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
}
这实际上是一个完美的解决方案。在我的伙伴的笔记本电脑上工作,但不能使用我的笔记本电脑。似乎是一些防病毒设置。