1
大文件
我正在做的FTP客户端,并试图上传文件到服务器(〜300 MB),但我得到以下时,几乎100 MB的文件被转移错误:例外通过FTP上传
The underlying connection was closed: An unexpected error occurred on a receive.
这里是我的代码:
private void UploadFile(string filepath, string filename)
{
try
{
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create("ftp://" + server + "/" + filename);
//ftp.KeepAlive = false;
//ftp.Timeout = 1000000;
//ftp.UsePassive = true;
//ftp.ReadWriteTimeout = 100000;
Path.GetFileName(filepath);
ftp.Credentials = new NetworkCredential(username, password);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
FileStream stream = File.OpenRead(filepath);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Close();
Stream requestStream = ftp.GetRequestStream();
//requestStream.ReadTimeout = 1000000;
//requestStream.WriteTimeout = 1000000;
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
response.Close();
}
catch (Exception ex) { CreateRunLogFile(ex.Message); }
CreateRunLogFile("Uploading of file " + filepath + " ended.");
}
我尝试使用,
ftp.KeepAlive = false;
ftp.Timeout = 1000000;
ftp.UsePassive = true;
但它并没有帮助。
该文件是否仍在传输?这可能是控制通道的超时,没有任何实际的错误。另外,您是否尝试过使用ftp客户端(如FileZilla)上传相同的文件?你看到什么行为? – JamieMeyer
@JamieMeyer,不,当程序抛出exe文件传输结束时。关于控制通道,我不明白。我试图用FileZilla和WinSCP上传,文件加载成功。还有一件事,我注意到,在上传100秒之后抛出了这个豁免。 – vasa911
您建立的超时值以毫秒为单位,这可能解释发生了什么。此外,这似乎也是默认设置,与记录的默认设置相反。尝试将其设置为-1并再试一次。这可能有所帮助:http://www.sidesofmarch.com/index.php/archive/2012/04/06/damn-the-documentation-ftpwebrequest-timeout-default-value-is-not-infinite/ – JamieMeyer