.netcore中的FTP客户端

Ser*_*kov 11 c# ftp ftp-client .net-core

我可以使用netcoreapp1.0通过FTP协议下载文件/列表文件吗?

我知道,如果我的目标是完整的.net45框架,我可以使用FtpWebRequestFluentFTP.

但是,我的解决方案都基于.net标准1.6,我不想仅仅为了拥有FTP而支持完整框架.

Ser*_*kov 9

FtpWebRequest现在包含在.NET Standard 2.0中

FluentFTP库还兼容最新的.net标准2.0

  • 注意:DE0003:不应使用WebRequest-https://github.com/dotnet/platform-compat/blob/master/docs/DE0003.md (2认同)

Cal*_*alC 9

FtpWebRequest.NET Core 2.0 现在支持。查看GitHub 存储库

用法示例:

public static byte[] MakeRequest(
    string method, 
    string uri, 
    string username, 
    string password, 
    byte[] requestBody = null)
{
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
    request.Credentials = new NetworkCredential(username, password);
    request.Method = method;
    //Other request settings (e.g. UsePassive, EnableSsl, Timeout set here)

    if (requestBody != null)
    {
        using (MemoryStream requestMemStream = new MemoryStream(requestBody))
        using (Stream requestStream = request.GetRequestStream())
        {
            requestMemStream.CopyTo(requestStream);
        }
    }

    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    using (MemoryStream responseBody = new MemoryStream())
    {
        response.GetResponseStream().CopyTo(responseBody);
        return responseBody.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

其中method参数的值设置为 的成员System.Net.WebRequestMethods.Ftp

另请参阅FTP 示例


vcs*_*nes 6

netcoreapp1.0或netstandard1.6没有开箱即用的FTP功能.FtpWebRequest将返回netstandard2.0.


Rob*_*cks 6

FluentFTP现在支持.NET核心/ .NET标准1.6.如果您遇到问题,请在问题跟踪器中添加问题,我们将对其进行处理.


Geo*_*kis 5

您可以尝试使用FtpWebRequest方法。

样本:

public static byte[] DownloadFile(string url, string filePath, string user, string password)
        {
            var ftpServerUrl = string.Concat(url, filePath);
            var request = (FtpWebRequest) WebRequest.Create(ftpServerUrl);
            request.Method = WebRequestMethods.Ftp.DownloadFile;

            request.Credentials = new NetworkCredential(user,password);
            using (var response = (FtpWebResponse) request.GetResponse())
            using (var responseStream = response.GetResponseStream())
            using (var memoryStream = new MemoryStream())
            {
                responseStream?.CopyTo(memoryStream);
                return memoryStream.ToArray();
            }
        }
Run Code Online (Sandbox Code Playgroud)

请记住,ftpServerUrl 必须是包含文件路径的有效 uri 路径。例如ftpServerUrl = "ftp://ftp.server/targetfile.txt"