c# - 在FTP上传文件无法正常工作

时间:2015-04-15 20:46:14

标签: c# ftp

我正在使用此代码将文件上传到FTP服务器:

String source = @"E:\\file\e1.txt";
String ftpurl = @"ftp://ftp.myftpserver.pl";
String ftpusername = @"myusername@myftpserver.pl";
String ftppassword = @"mypassword";

string filename = Path.GetFileName(source);
string ftpfullpath = ftpurl + "/" + filename;
Debug.WriteLine("Uploading...");

var fs = File.OpenRead(source);

FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);
ftp.Timeout = -1;
ftp.KeepAlive = true;
ftp.UseBinary = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;

Stream ftpstream = ftp.GetRequestStream();
fs.CopyTo(ftpstream); 
ftpstream.Close();


Debug.WriteLine("Upload complete.");

文件退出大 - 大约50 MB。因此,在上传文件后,appliaction挂起。这是调试窗口中的输出

Uploading... //immediately after executing the code
The thread 0xd50 has exited with code 0 (0x0). //after some time

它永远不会打印出来:

Upload complete.

请注意,在线程退出后,上传仍在进行中,但未取消。我注意到这个问题,当我试图在循环中从List发送多个文件时 - 应用程序在上传第一个文件后挂起。 有人能帮助我吗?

// EDIT 出于测试目的,我试图在for循环中上传更小的文件。它似乎在

后工作
The thread XXX has exited with code 0 (0x0). 

因为它的大小,但我的服务器接受更大的文件,我在ftp上有可用空间。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您很可能在控制频道上有超时。数据通道很忙,因此很开心......但是,您在代码中设置的任何超时或保持活动都不会在此处适用。深入检查您的FTP日志应该显示文件上传然后意外关闭会话。 检查防火墙和负载均衡器(如果有的话)(F5上的默认值对我来说完全一样......)