【发布时间】:2021-03-16 15:55:29
【问题描述】:
我有两种方法 (C# 4.8):一种使用 FTP 将文件上传到服务器目录,另一种使用 FTP 从服务器下载文件。这些中的每一个都可以独立工作。但是,当我调用UploadFile(...) 方法后跟Download 方法时,DownloadFile(...) 方法中的FtpWebRequest.Create(...) 方法会抛出异常。
我可以连续拨打DownloadFile(...)没有问题。
我是否遗漏了什么,也许是为了关闭连接?
例外是:
Message: "The remote server returned an error: 226-File successfully transferred\r\n226 1.707 seconds (measured here), 4.59 Mbytes per second\r\n."
InnerException: null
Status: ProtocolError
我的代码是:
public void UploadFile(FileInfo SourceFile, string Domain, string TargetFileName, string Username, string Password)
{
FtpWebRequest _FTPRequest = (FtpWebRequest)WebRequest.Create(Domain + TargetFileName);
_FTPRequest.Credentials = new NetworkCredential(Username, Password);
_FTPRequest.Method = WebRequestMethods.Ftp.UploadFile;
_FTPRequest.UseBinary = true;
_FTPRequest.KeepAlive = false;
_FTPRequest.UsePassive = true;
using (FileStream fileStream = SourceFile.OpenRead())
using (FtpWebResponse response = (FtpWebResponse)_FTPRequest.GetResponse())
using (Stream ftpStream = _FTPRequest.GetRequestStream())
{
byte[] buffer = new byte[1024];
int iRead;
while ((iRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
ftpStream.Write(buffer, 0, iRead);
}
}
public void DownloadFile(ref byte[] TargetArray, string Domain, string SourceFileName, string Username, string Password)
{
FtpWebRequest _FTPRequest = (FtpWebRequest)WebRequest.Create(Domain + SourceFileName); // exception is thrown here //
_FTPRequest.Credentials = new NetworkCredential(Username, Password);
_FTPRequest.Method = WebRequestMethods.Ftp.DownloadFile;
_FTPRequest.UseBinary = true;
_FTPRequest.KeepAlive = false;
_FTPRequest.UsePassive = true;
using (FtpWebResponse response = (FtpWebResponse)_FTPRequest.GetResponse())
using (Stream ftpStream = response.GetResponseStream())
{
byte[] buffer = new byte[1024];
int totalRead = 0;
int iRead;
while ((iRead = ftpStream.Read(buffer, 0, buffer.Length)) > 0)
{
if (buffer.Length > iRead) Array.Resize<byte>(ref buffer, iRead);
Array.Resize<byte>(ref TargetArray, TargetArray.Length + iRead);
buffer.CopyTo(TargetArray, totalRead);
totalRead += iRead;
}
}
}
【问题讨论】:
-
上传后得到什么响应?您可能会遇到错误。所以文件没有正确写入。
-
@jdweng 不,我尝试下载什么文件,或者文件用于将其上传到服务器的方法都没有关系。每当我在上传任何内容后尝试下载任何内容时都会出错。
-
@MartinPrikryl 感谢您提供线索!我花了很长时间才弄清楚如何启用日志记录,但一旦我做到了,我就朝着正确的方向前进。
标签: c# c#-4.0 ftp ftpwebrequest