web-dev-qa-db-ja.com

.netコアのFTPクライアント

netcoreapp1.0を使用してFTPプロトコル経由でファイルをダウンロードしたりファイルをリストしたりできますか?

フル。net45フレームワークを対象とする場合は FtpWebRequest または FluentFTP を使用できます。

しかし、私の解決策はすべて.net標準1.6に基づいており、FTPを使用するためだけに完全なフレームワークをサポートする必要はありません。

11
Sergei Rudakov

FtpWebRequest。NET Standard 2.に含まれるようになりました

FluentFTPライブラリは最新の.net標準2.0とも互換性があります

8
Sergei Rudakov

Netcoreapp1.0またはnetstandard1.6には、そのまま使用できるFTP機能はありません。 FtpWebRequest はnetstandard2.0で返されます。

6
vcsjones

FluentFTP は.NETコア/ .NET標準1.6をサポートするようになりました。問題が発生した場合は、問題トラッカーに問題を追加してください。問題を解決します。

6
Robinicks

FtpWebRequestが.NET Core 2.0でサポートされるようになりました。 GitHub repo を参照してください

使用例:

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の例

4
CalC

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"

2
George Kargakis