我编写了一个控制台应用程序,用于从FTP下载文件,然后上传到其他FTP位置。 文件下载大约需要10秒钟,但上传大约需要6分钟。 有256个文件,每个大小约5-30KB。非常小。
上传和下载代码非常相似,它遍历目录中的所有文件然后上传。它如下所示非常简单,它迭代并从D:\ LEV \文件夹上传文件到ftp。
编辑:这是在Azure'小型'Windows虚拟机上运行的,所以我假设带宽不是问题? 此外,我在另一个使用Windows ftp.exe上传的虚拟机上执行相同的任务,它比我在同一台计算机上的控制台应用程序快2倍。任何线索为什么它如此缓慢,或者有办法提高速度?
static public void Upload(string file1)
{
string upftpServerIP = "ftp://ftp.domain.co.uk/lev/";
string upftpUserID = "username";
string upftpPassword = "password";
string uri = upftpServerIP + file1;
Uri serverUri = new Uri(uri);
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return;
}
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(upftpServerIP + file1));
reqFTP.Credentials = new NetworkCredential(upftpUserID, upftpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.Proxy = null;
reqFTP.UsePassive = true;
Console.WriteLine("Uploading " + file1);
FileStream fs = File.OpenRead(@"D:\LEV\" + file1);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream ftpstream = reqFTP.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
}
static public string[] GetFileListUpload()
{
string[] uploadFiles = Directory.GetFiles(@"D:\LEV\", "*.*", SearchOption.TopDirectoryOnly);
return uploadFiles;
}
答案 0 :(得分:5)
这里有几个要考虑的因素:
您的互联网连接无法保证对称。大多数互联网连接计划(至少在我的地区)提供的上传带宽是下载带宽的1/8。
FTP服务器本身可能会限制传入连接的带宽。
FTP服务器也可能会限制每次上传的最大带宽 。在这种情况下,您将从多线程上传,一次上传多个文件中受益匪浅。