FTP Webrequest多个文件没有会话关闭
本文关键字:会话 文件 Webrequest FTP | 更新日期: 2023-09-27 18:18:38
我需要一些帮助来修改这个方法,这样它就不会为每个上传的文件创建一个新的FTP会话。
变量为服务器(IP或主机名)字典(本地文件路径,ftp服务器路径)ex (c:/mydir/test.txt, 'incoming)PASV使用被动模式True/False和FTP本身的登录名/密码
我希望这件事能以这种方式进行。
1)连接服务器 2)对于字典中的每个文件/路径对,上传文件3)连接服务器
是否有可能重写这个方法来完成这个?
我也知道try/catch应该更好地实现,我想有一个登录到FTP本身的try/catch块,然后为每个上传的文件一个try块,但我需要先整理方法的结构。
protected static bool FtpStart(string server, Dictionary<string, string> FilePath, bool PASV, string login, string password)
{
foreach (var Current in FilePath)
{
try
{
//FileInfo for Filename passed.
var ThisFile = new FileInfo(Current.Key);
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + server + Current.Value + ThisFile.Name);
request.UsePassive = PASV;
request.Method = WebRequestMethods.Ftp.UploadFile;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential(login, password);
// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(Current.Key);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();
}
catch (Exception Ex)
{
Console.WriteLine(Ex.Message);
return false;
}
}
return true;
}
您可以使用KeepAlive请求来避免连接关闭
request.KeepAlive = true;
这将只登录第一个FTPWebRequest
。
创建最后一个FTPWebRequest
request.KeepAlive = false;