c#使用FluentFtp实现一行代码实现ftp上传下载等

一:简介

FluentFTP 是一个完全托管的 .NET 和 .NET Standard 的 FTP 和 FTPS 库,针对速度进行了优化。

它提供了广泛的 FTP 命令、文件上传/下载、SSL/TLS 连接、自动目录列表解析、文件哈希/校验和、

文件权限/CHMOD、FTP 代理、FXP 传输、UTF-8 支持、异步/等待支持、Powershell 支持和更多的。

它完全用 C# 编写,没有外部依赖项。FluentFTP 是在宽松的 MIT 许可证下发布的,因此它可以在专有和免费/开源应用程序中使用。

二:特征

完全支持FTP、FXP、FTPS(基于 SSL 的 FTP)、带有客户端证书的FTPS 和带有 CCC的 FTPS (用于 FTP 防火墙)

完全递归的目录列表和目录删除(手动递归和服务器端递归)

通过进度跟踪轻松从服务器上传和下载文件

使用简单的同步模式从服务器轻松上传和下载目录

使用 FXP 协议轻松地将文件或文件夹直接从一台服务器传输到另一台服务器

使用基于规则的白名单和黑名单有条件地传输文件

自动验证文件的哈希并在哈希不匹配时重试传输

多文件传输的可配置错误处理(忽略/中止/抛出)

使用标准流轻松地从服务器读取和写入文件数据

创建、追加、读取、写入、重命名、移动和删除文件和文件夹

递归删除文件夹及其所有内容

获取文件/文件夹信息(存在、大小、安全标志、修改日期/时间)

获取和设置文件权限(所有者、组、其他)

绝对或相对路径(相对于“工作目录”)

使用哈希/校验和(MD5、CRC32、SHA-1、SHA-256、SHA-512)将本地文件与远程文件进行比较

取消引用符号链接以计算链接的文件/文件夹

通过可配置的速度限制限制上传和下载

三:异步支持:

对所有操作使用async/的同步和异步方法await

.NET 4.0 及以下使用模式的异步方法IAsyncResult(Begin*/End*)

所有异步方法都可以通过传递一个CancellationToken

所有异步方法都遵循ReadTimeout并在超时时自动取消

通过克隆文件传输的 FTP 控制连接来提高线程安全性(可选)

实现自己的内部锁定以保持事务同步

四:使用

使用Nuget 搜索FluentFtp

ca42d2a9db1a107b20cfefb95486fca5.png

使用FluentFtp封装好的FtpClient实现上传下载

public  class FtpHelper{FtpClient _client;public FtpHelper(){_client = new FtpClient(CommonConst.Url);_client.Credentials = new System.Net.NetworkCredential(CommonConst.UserName, CommonConst.Pwd);_client.Connect();}/// <summary>/// 上传ftp/// </summary>/// <param name="originalAddress"></param>/// <param name="destinationAddress"></param>/// <returns></returns>public bool UpLoadFile(string originalAddress, string destinationAddress){if (_client.UploadFile(originalAddress, destinationAddress, FtpRemoteExists.Overwrite, true) == FtpStatus.Success){return true;}return false;}/// <summary>/// 以流的方式 ftp/// </summary>/// <param name="fileStream"></param>/// <param name="destinationAddress"></param>/// <returns></returns>public bool UpLoad(Stream fileStream, string destinationAddress){if (_client.Upload(fileStream, destinationAddress, FtpRemoteExists.Overwrite, true) == FtpStatus.Success){return true;}return false;}/// <summary>/// 下载ftp/// </summary>/// <param name="originalAddress"></param>/// <param name="destinationAddress"></param>/// <returns></returns>public bool DownloadFile(string originalAddress, string destinationAddress){if (_client.DownloadFile(originalAddress, destinationAddress) == FtpStatus.Success){return true;}return false;}/// <summary>/// 以流的方式下载/// </summary>/// <param name="outStream"></param>/// <param name="destinationAddress"></param>/// <returns></returns>public bool DownloadStream(Stream outStream, string destinationAddress){if (_client.Download(outStream, destinationAddress) == true){return true;}return false;}}

最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件体系结构知识点整理

包括软件体系结构风格、uml、软件质量属性、面向对象设计原则以及设计模式 pdf及goodnote版本

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...

本节书摘来自异步社区出版社《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》一书中的第1章&#xff0c;第1.2节&#xff0c;作者&#xff1a; 【美】Itzik Ben-Gan&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 使用窗口函数的解决方案简介 …

第一台定制商用NAS存储服务器

记得前不久在网络上看到有人在问有没有人将openfiler进行实际应用&#xff0c;以我看应该是有的&#xff0c;而且不少&#xff0c;你是否在用&#xff0c;或者曾经用过呢&#xff1f;LINUX加PC主机来定制各种应用型服务器&#xff0c;一直是我想去推广的&#xff0c;也就是如何…

[Java] java中的接口定义

在Java的通常规范中&#xff0c;对数据成员的修改要通过接口提供的方法进行&#xff08;如下面示例中接口中的void learnMath(int hours)和void learnEnglish(int hours)&#xff09;&#xff0c;这个规范起到了保护数据的作用。用户不能直接修改数据&#xff0c;必须通过相应的…

ASP.NET Core(十)Configuration 配置优先级详解

ASP.NET Core 项目启动&#xff0c;默认执行顺序为&#xff1a;宿主 Host -> 读取配置 -> 日志设置 -> 注册服务&#xff08;DI&#xff09;-> 添加中间件 -> WebHost 监听 -> 后台 Work 启动。配置的加载和读取是在启动流程的最前面。微软关于 ASP.NET Core…

《BeagleBone开发指南》——1.7 小结

本节书摘来异步社区《BeagleBone开发指南》一书中的第1章&#xff0c;第1.7节&#xff0c;作者&#xff1a;【爱】Derek Molloy&#xff08;莫洛伊&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.7 小结 在完成本章后&#xff0c;你应该具备…

软件配置管理(一)配置管理概念与目标

软件配置管理的定义 软件配置管理&#xff08;Software Configuration Management,SCM&#xff09;是一组针对软件产品的追踪和控制活动&#xff0c;它贯穿于项目生命周期的始终&#xff0c;并代表软件产品接受各项评审。 软件配置管理的目的 软件配置管理是贯穿于整个软件过…

Android之运行Java.lang.UnsatisfiedLinkError的错误解决办法

1、问题 部分手机运行的时候在jni层出现这个错误,导致手机崩溃 Java.lang.UnsatisfiedLinkError 2、解决办法 是因为在我是这样写的 static {System.loadLibrary("");} 把报错的依赖加进去 static {System.loadLibrary("");System.loadLibrary("&q…

带中文索引的ListView 仿微信联系人列表

因为各种原因&#xff0c;项目经理和产品经理把我做的东西给否定了&#xff0c;所以决定分享出去。 主要功能&#xff1a; 1 、带中文索引的ListView 2、自己定义顶部搜索视图&#xff0c;能够对返回button&#xff0c;搜索button加入事件监听&#xff0c;带动画的咧&#xff0…

APP访问路径和销售归因分析

用户浏览路径是分析用户行为的关键&#xff0c;也是页面分析的关键。虽然可以很方便的获取到PV数据&#xff0c;但却无法知道用户是浏览哪些页面后来到当前页面&#xff0c;也不知道浏览过当前页面的用户又去了哪些其他页面。诸如此类的问题还有&#xff1a;某专题活动产生了多…

解决 ASP.NET Core 部署到 IIS,更新项目时文件夹正在使用错误

前言虽然 ASP.NET Core 应用程序是跨平台的&#xff0c;但我们还是经常将它部署到 Windows 的 IIS 下。当 ASP.NET Core 站点运行时&#xff0c;它会锁定正在使用的程序集&#xff0c;如果这时向站点目录下复制文件进行更新&#xff0c;会提示文件被占用的错误&#xff1a;这时…

linux之用xargs删除这个目录下面后缀为txt的文件(包括子目录)

1问题 删除这个目录下面后缀为txt的文件&#xff08;包括子目录&#xff09; 2、xargs命令解决 find . -name "*.txt" | xargs rm -rf3、xargs相关用途 比如在特定的文件里面找到相应的关键字 find . -name "*.txt" | xargs grep word或者 grep -r wor…

软件配置管理(二)配置管理角色与过程

文章目录一、配置管理角色及职责项目经理&#xff08;PM&#xff09;配置控制委员会&#xff08;CCB&#xff09;配置管理员&#xff08;CMO&#xff09;系统集成员&#xff08;SIO&#xff09;开发人员&#xff08;DEV&#xff09;二、配置管理基本流程计划阶段开发和维护阶段…

JAVA多线程和并发基础面试问答

原文链接 译文连接 作者&#xff1a;Pankaj 译者&#xff1a;郑旭东 校对&#xff1a;方腾飞 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里&#xff0c;从面试的角度列出了大部分重要的问题&#xff0c;但是你仍然应该牢固的掌握Java多线程基础知识…

学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)

一.语法 1.javascirpt中一切&#xff08;变量&#xff0c;函数名和操作符&#xff09;是严格区分大小写的。 2.javascript&#xff08;标识符&#xff09; 所谓标识符&#xff0c;就是指变量&#xff0c;函数&#xff0c;属性的名字&#xff0c;或者函数的参数。 命名规则&…

Android悬浮窗口的实现

效果图&#xff1a;&#xff08;悬浮框可拖动&#xff09; 在项目开发中有一个需求&#xff1a;弹出悬浮窗后&#xff0c;响应悬浮窗的事件再弹出对话框&#xff0c;但是对话框怎么也不显示。也就是说在弹出悬浮框的同时&#xff0c;不能再弹出对话框&#xff0c;可能的原因&am…

Android之invalid address or address of corrupt block 0xabb494a0 passed to dlfree崩溃解决办法

1、问题 手机崩溃 invalid address or address of corrupt block 0xabb494a0 passed to dlfree Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadbaad in tid 29629 (AsyncTask #1) #00 pc 000308a6 /system/lib/libc.so (dlfree1285) 2、原因 const char* 转char *的…

软件配置管理(三)软件配置管理核心功能

文章目录一、CMM/CMMI与软件配置管理产品完整性二、三库管理三、基线管理基线管理的好处基线管理的步骤四、配置库管理五、变更管理变更管理流程六、配置审计七、配置状态报告一、CMM/CMMI与软件配置管理 软件配置管理是CMM/CMMI二级&#xff08;可重复级&#xff09;的一个重…

移除指定 global using 命名空间

前言在《.NET 6新特性试用 | 隐式using指令》中&#xff0c;我们介绍过&#xff0c;开启隐式using指令时&#xff0c;会在编译时生成 GlobalUsings.g.cs 文件&#xff0c;加入大量 global using 指令&#xff1a;// <auto-generated/> global using global::Microsoft.As…

Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上

Ubuntu 每日技巧- 自动备份Ubuntu 14.04到Box云存储上 如今你已经升级或者安装了Ubuntu 14.04&#xff0c; 但是还有另外一件保护你的新系统需要做的事情&#xff1a;备份&#xff01; Ubuntu内置了一个备份工具 Dj Dup Backup Tool。它允许你备份你的系统并保存在本地或者通过…