我有这个方法:
public async Task CopyFileToOurFTP(FtpCredentialModel model)
{
foreach (var fileName in model.FileNames)
{
try
{
string uri = model.Host + "/" + fileName;
Uri serverUri = new Uri(uri);
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return;
}
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(model.Username, model.Password);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream responseStream = response.GetResponseStream();
FileStream writeStream = new FileStream("D:\\Dev" + "\\" + fileName, FileMode.Create);
int Length = 2048;
Byte[] buffer = new Byte[Length];
int bytesRead = await responseStream.ReadAsync(buffer, 0, Length);
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = await responseStream.ReadAsync(buffer, 0, Length);
}
writeStream.Close();
response.Close();
}
catch (WebException wEx)
{
_logger.Error($"{wEx.Message} >>> {wEx.StackTrace}");
}
catch (Exception ex)
{
_logger.Error($"{ex.Message} >>> {ex.StackTrace}");
}
}
}我的凭证模型类:
public class FtpCredentialModel
{
public string Host { get; set; }
public string FileMask { get; set; }
public List<string> FileNames { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public FtpCredentialModel()
{
FileNames = new List<string>();
}
}和json
{
"host": "ftp://ftp.com:21",
"fileMask": ".txt",
"fileNames": [
"test.txt",
"test_01.txt"
],
"username": "guest",
"password": "guest"
}我想让它异步,并返回下载文件的计数。
据我所知,我需要让FtpWebResponse异步,但我不知道怎么做。有谁能帮帮我呢?
发布于 2021-03-23 21:15:17
FtpWebRequest类实现了GetResponseAsync和GetRequestStreamAsync,您可以使用它们使请求异步
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(model.Username, model.Password);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = await reqFTP.GetResponseAsync();
Stream responseStream = await response.GetRequestStreamAsync();https://stackoverflow.com/questions/66762252
复制相似问题