首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使FtpWebResponse异步

如何使FtpWebResponse异步
EN

Stack Overflow用户
提问于 2021-03-23 19:28:26
回答 1查看 39关注 0票数 0

我有这个方法:

代码语言:javascript
复制
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}");
        }
    }
}

我的凭证模型类:

代码语言:javascript
复制
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

代码语言:javascript
复制
{
  "host": "ftp://ftp.com:21",
  "fileMask": ".txt",
"fileNames": [
"test.txt",
    "test_01.txt"
  ],
  "username": "guest",
  "password": "guest"
}

我想让它异步,并返回下载文件的计数。

据我所知,我需要让FtpWebResponse异步,但我不知道怎么做。有谁能帮帮我呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 21:15:17

FtpWebRequest类实现了GetResponseAsyncGetRequestStreamAsync,您可以使用它们使请求异步

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66762252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档