FTP-клиент в .netcore

Можно ли загружать файлы/список файлов по протоколу FTP с помощью netcoreapp1.0?

Я знаю, я могу использовать FtpWebRequest или FluentFTP, если я нацелен на полную структуру .net45.

Мое решение, однако, основано на стандарте .net 1.6, и я не хочу поддерживать полную структуру только для того, чтобы иметь FTP.

Ответ 1

FtpWebRequest теперь включен в .NET Standard 2.0

Библиотека FluentFTP также совместима с последним стандартом .net 2.0

Ответ 2

Нет встроенных возможностей FTP для netcoreapp1.0 или netstandard1.6. FtpWebRequest вернется в netstandard2.0.

Ответ 3

FluentFTP теперь поддерживает ядро .NET/стандарт .NET 1.6. Если вы столкнулись с проблемами, пожалуйста, добавьте проблему в трекер, и мы поработаем над ней.

Ответ 4

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();
    }
}

Где значение параметра method установлено как член System.Net.WebRequestMethods.Ftp.

Смотрите также примеры FTP

Ответ 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();
            }
        }

Помните, что ftpServerUrl должен быть допустимым путем uri, содержащим путь к файлу. например, ftpServerUrl = "ftp://ftp.server/targetfile.txt"