public async Task Should_not_hang(FtpEncryption encryption) { string randomFileName = $"{Guid.NewGuid()}.jpg"; var tempFile = ResourceHelpers.GetTempFileInfo(); tempFile.Length.Should().Be(0); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { await sut.LoginAsync(); var stream = await OpenWriteAsync(sut, "/", randomFileName); stream.Dispose(); } }
public async Task Should_delete_directory_when_exists(FtpEncryption encryption) { string randomDirectoryName = Guid.NewGuid().ToString(); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.CreateDirectoryAsync(randomDirectoryName); (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeTrue(); await sut.DeleteDirectoryAsync(randomDirectoryName); (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeFalse(); } }
public async Task Should_change_to_directory_when_exists(FtpEncryption encryption) { string randomDirectoryName = Guid.NewGuid().ToString(); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.CreateDirectoryAsync(randomDirectoryName); await sut.ChangeWorkingDirectoryAsync(randomDirectoryName); sut.WorkingDirectory.Should().Be($"/{randomDirectoryName}"); await sut.ChangeWorkingDirectoryAsync("../"); await sut.DeleteDirectoryAsync(randomDirectoryName); } }
public async Task Should_create_a_directory(FtpEncryption encryption) { string randomDirectoryName = Guid.NewGuid().ToString(); ReadOnlyCollection <FtpNodeInformation> directories; using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.CreateDirectoryAsync(randomDirectoryName); directories = await sut.ListDirectoriesAsync(); await sut.DeleteDirectoryAsync(randomDirectoryName); await sut.LogOutAsync(); } directories.Any(x => x.Name == randomDirectoryName).Should().BeTrue(); }
public async Task Should_give_size(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string randomFilename = $"{Guid.NewGuid()}.jpg"; await sut.LoginAsync(); await sut.CreateTestResourceWithNameAsync("test.png", randomFilename); long size = await sut.GetFileSizeAsync(randomFilename); size.Should().Be(34427); await sut.DeleteFileAsync(randomFilename); } }
public async Task Should_list_files_in_root(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string randomFileName = $"{Guid.NewGuid()}.jpg"; await sut.LoginAsync(); await sut.CreateTestResourceWithNameAsync("penguin.jpg", randomFileName); (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeTrue(); await sut.DeleteFileAsync(randomFileName); (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeFalse(); } }
public async Task Should_rename_file(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string originalRandomFileName = $"{Guid.NewGuid()}.jpg"; string subsequentlyRenamedRandomFileName = $"{Guid.NewGuid()}.jpg"; await sut.LoginAsync(); await sut.CreateTestResourceWithNameAsync("penguin.jpg", originalRandomFileName); (await sut.ListFilesAsync()).Any(x => x.Name == originalRandomFileName).Should().BeTrue(); await sut.RenameAsync(originalRandomFileName, subsequentlyRenamedRandomFileName); var filesAfterRename = await sut.ListFilesAsync(); filesAfterRename.Any(x => x.Name == originalRandomFileName).Should().BeFalse(); filesAfterRename.Any(x => x.Name == subsequentlyRenamedRandomFileName).Should().BeTrue(); await sut.DeleteFileAsync(subsequentlyRenamedRandomFileName); } }
public async Task Should_list_directories_in_root(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string randomDirectoryName = $"{Guid.NewGuid()}"; await sut.LoginAsync(); await sut.CreateDirectoryAsync(randomDirectoryName); var directories = await sut.ListDirectoriesAsync(); directories.Any(x => x.Name == randomDirectoryName).Should().BeTrue(); await sut.DeleteDirectoryAsync(randomDirectoryName); } }
/// <summary> /// FTP下载 /// </summary> /// <param name="ftpConfig">ftp配置</param> /// <param name="ftpEncryption"></param> /// <param name="ignoreCertificateErrors"></param> /// <returns></returns> public static async Task <bool> Download(FtpConfig ftpConfig, FtpEncryption ftpEncryption = FtpEncryption.Implicit, bool ignoreCertificateErrors = true) { using (var ftpClient = new FtpClient(new FtpClientConfiguration { Host = ftpConfig.Host, Port = ftpConfig.Port, Username = ftpConfig.UserName, Password = ftpConfig.Password, BaseDirectory = ftpConfig.BaseDirectory, EncryptionType = ftpEncryption, IgnoreCertificateErrors = true })) { await ftpClient.LoginAsync(); if (string.IsNullOrWhiteSpace(ftpConfig.RemotePath)) { //文件路径为空,递归保存工作目录下的全部文件 await SaveFileAsync(ftpClient, ftpConfig); } else { //文件路径不为空,只保存这一个文件 var localPath = await GetLocalPathAsync(ftpConfig); using (var ftpReadStream = await ftpClient.OpenFileReadStreamAsync(ftpConfig.RemotePath)) await SaveFileAsync(ftpReadStream, localPath, ftpConfig.RenameFormat); } } return(true); }
public async Task Should_recurse_as_appropriate_to_create_file(FtpEncryption encryption) { string[] randomDirectoryNames = { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; string joinedPath = string.Join("/", randomDirectoryNames); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); string randomFile = $"{Guid.NewGuid()}.txt"; using (var writeStream = await sut.OpenFileWriteStreamAsync($"/{joinedPath}/{randomFile}")) { var fileReadStream = "abc123".ToByteStream(); await fileReadStream.CopyToAsync(writeStream); } (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryNames[0]).Should().BeTrue(); await sut.ChangeWorkingDirectoryAsync(randomDirectoryNames[0]); (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryNames[1]).Should().BeTrue(); await sut.ChangeWorkingDirectoryAsync(randomDirectoryNames[1]); (await sut.ListFilesAsync()).Any(x => x.Name == randomFile).Should().BeTrue(); await sut.DeleteFileAsync(randomFile); foreach (string directory in randomDirectoryNames.Reverse()) { await sut.ChangeWorkingDirectoryAsync("../"); await sut.DeleteDirectoryAsync(directory); } } }
public async Task Should_be_in_base_directory_when_logging_in(FtpEncryption encryption) { string randomDirectoryName = $"{Guid.NewGuid()}"; using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; Logger?.LogDebug("----------Logging In first time----------"); await sut.LoginAsync(); Logger?.LogDebug("----------Creating Directory for use in basepath----------"); await sut.CreateDirectoryAsync(randomDirectoryName); } using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true, BaseDirectory = randomDirectoryName })) { sut.Logger = Logger; Logger?.LogDebug("----------Logging In second time----------"); await sut.LoginAsync(); sut.WorkingDirectory.Should().Be($"/{randomDirectoryName}"); Logger?.LogDebug("----------Deleting directory----------"); await sut.DeleteDirectoryAsync($"/{randomDirectoryName}"); } }
public async Task Should_upload_file_to_subdirectory(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string randomDirectoryName = $"{Guid.NewGuid()}"; string randomFileName = $"{Guid.NewGuid()}.jpg"; await sut.LoginAsync(); await sut.CreateDirectoryAsync(randomDirectoryName); var fileinfo = ResourceHelpers.GetResourceFileInfo("penguin.jpg"); using (var writeStream = await sut.OpenFileWriteStreamAsync($"/{randomDirectoryName}/{randomFileName}")) { var fileReadStream = fileinfo.OpenRead(); await fileReadStream.CopyToAsync(writeStream); } await sut.ChangeWorkingDirectoryAsync(randomDirectoryName); var files = await sut.ListFilesAsync(); files.Any(x => x.Name == randomFileName).Should().BeTrue(); await sut.DeleteFileAsync(randomFileName); await sut.ChangeWorkingDirectoryAsync("../"); await sut.DeleteDirectoryAsync(randomDirectoryName); } }
public async Task Should_list_directories_in_subdirectory(FtpEncryption encryption) { string[] randomDirectoryNames = { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string joinedPath = string.Join("/", randomDirectoryNames); await sut.LoginAsync(); await sut.CreateDirectoryAsync(joinedPath); await sut.ChangeWorkingDirectoryAsync(randomDirectoryNames[0]); var directories = await sut.ListDirectoriesAsync(); directories.Any(x => x.Name == randomDirectoryNames[1]).Should().BeTrue(); await sut.ChangeWorkingDirectoryAsync($"/{joinedPath}"); foreach (string directory in randomDirectoryNames.Reverse()) { await sut.ChangeWorkingDirectoryAsync("../"); await sut.DeleteDirectoryAsync(directory); } } }
public async Task Should_recursively_delete_folder(FtpEncryption encryption) { string randomDirectoryName = Guid.NewGuid().ToString(); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.CreateTestResourceWithNameAsync("penguin.jpg", $"{randomDirectoryName}/1/penguin.jpg"); await sut.CreateDirectoryAsync($"{randomDirectoryName}/1/1/1"); await sut.CreateDirectoryAsync($"{randomDirectoryName}/1/1/2"); await sut.CreateDirectoryAsync($"{randomDirectoryName}/1/2/2"); await sut.CreateDirectoryAsync($"{randomDirectoryName}/2/2/2"); (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeTrue(); try { await sut.DeleteDirectoryAsync(randomDirectoryName); } catch (Exception e) { throw new Exception(e.ToAsyncString()); } (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeFalse(); } }
public async Task Should_throw_exception_when_file_nonexistent(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await Assert.ThrowsAsync <FtpException>(() => sut.GetFileSizeAsync($"{Guid.NewGuid()}.png")); } }
public async Task Should_set_as_binary(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.SetTransferMode(FtpTransferMode.Binary); } }
public async Task Should_create_directory_structure_recursively(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; var guid = Guid.NewGuid().ToString(); await sut.LoginAsync(); await sut.SetClientName(nameof( Should_create_directory_structure_recursively )); await sut.CreateDirectoryAsync($"{guid}/abc/123"); (await sut.ListDirectoriesAsync()).ToList() .Any(x => x.Name == guid) .Should().BeTrue(); await sut.ChangeWorkingDirectoryAsync(guid); (await sut.ListDirectoriesAsync()).ToList() .Any(x => x.Name == "abc") .Should().BeTrue(); await sut.ChangeWorkingDirectoryAsync("/"); await sut.DeleteDirectoryAsync($"/{guid}/abc/123"); await sut.DeleteDirectoryAsync($"/{guid}/abc"); await sut.DeleteDirectoryAsync(guid); } }
public async Task Should_upload_file_to_subdirectory_when_given_as_basepath(FtpEncryption encryption) { var guid = Guid.NewGuid(); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true, BaseDirectory = $"{guid}/abc/123/doraeme" })) { sut.Logger = Logger; string randomFileName = $"{guid}.jpg"; await sut.LoginAsync(); var fileinfo = ResourceHelpers.GetResourceFileInfo("penguin.jpg"); using (var writeStream = await sut.OpenFileWriteStreamAsync($"another_level/{randomFileName}")) { var fileReadStream = fileinfo.OpenRead(); await fileReadStream.CopyToAsync(writeStream); } await sut.ChangeWorkingDirectoryAsync("/".CombineAsUriWith( sut.Configuration.BaseDirectory ) .CombineAsUriWith("another_level")); var files = await sut.ListFilesAsync(); files.Any(x => x.Name == randomFileName).Should().BeTrue(); await sut.DeleteDirectoryAsync($"/{guid}"); } }
public async Task Should_present_read_stream_and_deliver_file(FtpEncryption encryption) { string randomFileName = $"{Guid.NewGuid()}.jpg"; var tempFile = ResourceHelpers.GetTempFileInfo(); tempFile.Length.Should().Be(0); using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.CreateTestResourceWithNameAsync("test.png", randomFileName); using (var ftpReadStream = await sut.OpenFileReadStreamAsync(randomFileName)) { using (var fileWriteStream = tempFile.OpenWrite()) { await ftpReadStream.CopyToAsync(fileWriteStream); } } await sut.DeleteFileAsync(randomFileName); } tempFile.Exists.Should().BeTrue(); tempFile.Refresh(); tempFile.Length.Should().NotBe(0); tempFile.Delete(); }
public async Task Should_fail_when_changing_to_a_nonexistent_directory(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; await sut.LoginAsync(); await sut.SetClientName(nameof( Should_fail_when_changing_to_a_nonexistent_directory )); await Assert.ThrowsAsync <FtpException>(() => sut.ChangeWorkingDirectoryAsync(Guid.NewGuid().ToString())); } }
public async Task Should_rename_directory(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true, TimeoutSeconds = 20 })) { sut.Logger = Logger; string oldRandomDirectoryName = Guid.NewGuid().ToString(); string newRandomDirectoryName = Guid.NewGuid().ToString(); await sut.LoginAsync(); await sut.CreateDirectoryAsync(oldRandomDirectoryName); (await sut.ListDirectoriesAsync()).Any(x => x.Name == oldRandomDirectoryName).Should().BeTrue(); await sut.RenameAsync(oldRandomDirectoryName, newRandomDirectoryName); var directoriesAfterRename = await sut.ListDirectoriesAsync(); directoriesAfterRename.Any(x => x.Name == oldRandomDirectoryName).Should().BeFalse(); directoriesAfterRename.Any(x => x.Name == newRandomDirectoryName).Should().BeTrue(); await sut.DeleteDirectoryAsync(newRandomDirectoryName); await sut.LogOutAsync(); } }
public async Task Should_delete_file(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string randomFileName = $"{Guid.NewGuid()}.jpg"; await sut.LoginAsync(); var fileinfo = ResourceHelpers.GetResourceFileInfo("penguin.jpg"); Logger.LogDebug("Writing the file"); using (var writeStream = await sut.OpenFileWriteStreamAsync(randomFileName)) { var fileReadStream = fileinfo.OpenRead(); await fileReadStream.CopyToAsync(writeStream); } Logger.LogDebug("Listing the directory"); (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeTrue(); Logger.LogDebug("Deleting the file"); await sut.DeleteFileAsync(randomFileName); Logger.LogDebug("Listing the firector"); (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeFalse(); } }
public async Task Should_change_to_deep_directory_when_exists(FtpEncryption encryption) { string[] randomDirectoryNames = { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string joinedPath = string.Join("/", randomDirectoryNames); await sut.LoginAsync(); await sut.CreateDirectoryAsync(joinedPath); await sut.ChangeWorkingDirectoryAsync(joinedPath); sut.WorkingDirectory.Should().Be($"/{joinedPath}"); foreach (string directory in randomDirectoryNames.Reverse()) { await sut.ChangeWorkingDirectoryAsync("../"); await sut.DeleteDirectoryAsync(directory); } } }
public async Task Should_be_able_to_connect_and_disconnect_as_anonymous_user(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; sut.IsConnected.Should().BeFalse(); await sut.LoginAsync(); sut.IsConnected.Should().BeTrue(); await sut.LogOutAsync(); sut.IsConnected.Should().BeFalse(); } }
public async Task Should_throw_exception_when_folder_nonexistent(FtpEncryption encryption) { using (var sut = new FtpClient(new FtpClientConfiguration { Host = Program.FtpConfiguration.Host, Username = Program.FtpConfiguration.Username, Password = Program.FtpConfiguration.Password, Port = encryption == FtpEncryption.Implicit ? 990 : Program.FtpConfiguration.Port, EncryptionType = encryption, IgnoreCertificateErrors = true })) { sut.Logger = Logger; string randomDirectoryName = Guid.NewGuid().ToString(); await sut.LoginAsync(); await Assert.ThrowsAsync <FtpException>(() => sut.DeleteDirectoryAsync(randomDirectoryName)); await sut.LogOutAsync(); } }
/// <summary> /// FTP下载 /// </summary> /// <param name="ip">ftp服务主机ip</param> /// <param name="username">ftp用户名</param> /// <param name="password">ftp用户密码</param> /// <param name="baseDirectory">基础目录</param> /// <param name="remotepath">文件路径</param> /// <param name="localDirectory">本地保存目录</param> /// <param name="port">端口号,默认21</param> /// <param name="ftpEncryption"></param> /// <param name="ignoreCertificateErrors"></param> /// <returns></returns> public static async Task <bool> Download(string ip, string username, string password, string baseDirectory, string remotepath, string localDirectory, int port = 21, FtpEncryption ftpEncryption = FtpEncryption.Implicit, bool ignoreCertificateErrors = true) { var ftpConfig = new FtpConfig { Host = ip, Port = port, UserName = username, Password = password, BaseDirectory = baseDirectory, RemotePath = remotepath, LocalDirectory = localDirectory }; return(await Download(ftpConfig, ftpEncryption, ignoreCertificateErrors)); }