在开发框架中使用FTP辅助类上传或者下载文件,方便管理附件内容
在有些系统应用里面,我们需要对应用服务器、数据库服务器、文件服务器进行分开,文件路径等信息存储在数据库服务器里面,但文件内容则存储在文件服务器里面,通过使用FTP进行文件的上传下载,从而实现更加高效的IO输出,也分担了服务器的压力。本篇随笔介绍使用公用类库里面的FTPHelper辅助类,实现文件的上传下载等基础操作。
1、FTPHelper辅助类的接口说明
首先我们为了方便辅助类的使用,使用了构造函数进行对象的参数初始化,如下所示。

我们整个FTPHelper辅助类,是使用FTP命令和FTP服务器进行交换,因此需要如果要获取文件或目录信息,那么就需要对这些信息进行转换为合适格式的内容,这里我们定义一个结构体用来承载这些信息。

这样我们可以顺利把FTP服务器的字符串返回(DOS格式或者Unix格式字符串)它们转换为对应的结构体,方便使用了。

整个辅助函数,提供了一些基础的函数来操作FTP文件或者目录,如下所示
/// <summary>
/// 仅获取文件列表
/// </summary>
/// <returns>获取的文件列表</returns>
public List<FileStruct> ListFiles() /// <summary>
/// 仅获取目录列表
/// </summary>
/// <returns>获取到的目录列表</returns>
public List<FileStruct> ListDirectories()
以及
/// <summary>
/// 关闭FTP服务器的所有连接
/// </summary>
public void Disconnect() /// <summary>
/// 连接到FTP服务器
/// </summary>
/// <param name="server">FTP服务器的IP或者主机名</param>
/// <param name="port">FTP服务器端口</param>
/// <param name="user">登录用户名</param>
/// <param name="pass">登录密码</param>
public void Connect(string server, int port, string user, string pass) /// <summary>
/// 获取FTP的当前工作目录
/// </summary>
public string GetWorkingDirectory() /// <summary>
/// 在FTP服务器上改变目录
/// </summary>
public void ChangeDir(string path) /// <summary>
/// 在FTP服务器上创建新的目录
/// </summary>
public void MakeDir(string dir) /// <summary>
/// 在FTP服务器上移除目录
/// </summary>
public void RemoveDir(string dir) /// <summary>
/// 在FTP上移除一个文件
/// </summary>
public void RemoveFile(string filename) /// <summary>
/// 在FTP服务器上重命名一个文件
/// </summary>
/// <param name="oldfilename">旧文件名</param>
/// <param name="newfilename">新文件名</param>
public void RenameFile(string oldfilename, string newfilename) /// <summary>
/// 打开一个存在的文件(支持续传)上传
/// </summary>
/// <param name="filename">本地上传的文件(包含文件路径)</param>
/// <param name="remote_filename">存储在FTP上的文件名称</param>
/// <param name="resume">如果存在,指定是否续传</param>
public void OpenUpload(string filename, string remote_filename, bool resume) /// <summary>
/// 打开下载一个文件
/// </summary>
/// <param name="remote_filename">FTP上的远端文件名</param>
/// <param name="local_filename">另存为的文件名称(包含文件路径)</param>
/// <param name="resume">如果存在,指定是否续传</param>
public void OpenDownload(string remote_filename, string local_filename, bool resume) /// <summary>
/// 上传文件,循环操作直到文件全部上传完毕
/// </summary>
/// <returns>发送的字节数组大小</returns>
public long DoUpload() /// <summary>
/// 下载文件,循环操作直到文件全部下载完毕
/// </summary>
/// <returns>收到的字节数组大小</returns>
public long DoDownload()
2、FTPHelper辅助类的使用
基于上述的接口,我们编写了一个使用Demo,主要用来介绍这个辅助类的各种接口使用。

获取到的测试结果输出如下所示

虽然我们在附件管理里面采用了更为通用的《附件管理模块》,统一上传文件到服务器上进行管理,并提供下载管理等内容,连接如下:
《Winform开发框架之附件管理应用》。其他公用类库的使用说明,具体可以参考文章《公用类库使用帮助》
不过我们开发的时候,为了方便,也可以使用 FTPHelper辅助类进行简单的文件上传下载操作。
在开发框架中使用FTP辅助类上传或者下载文件,方便管理附件内容的更多相关文章
- Linux学习笔记:使用ftp命令上传和下载文件
Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹.虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器.SSH.远程会话中掌握命令行ftp的使用 ...
- linux ftp批量上传和下载文件
一.登录ftp 输入 ftp 192.168.1.111 输入用户名:ftpuser 输入密码:aaa123 二.转到目标目录 输入:cd test ----test为文件夹 三.批量上传 输 ...
- FTP服务器上传,下载文件
public class FtpUtil { /** * * @param host FTP服务器地址 * @param port FTP服务器端口 * @param username FTP登录账号 ...
- ftp上传或下载文件工具类
FtpTransferUtil.java工具类,向ftp上传或下载文件: package utils; import java.io.File; import java.io.FileOutputSt ...
- 如何在Linux中使用sFTP上传或下载文件与文件夹
如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过 ...
- 使用 PC 做 FTP/TFTP 服务器,上传和下载文件
使用PC做TFTP服务器,上传和下载文件需要用到一个工具软件,IPOP,可百度下载. 1.在桌面新建一个空闲的文件夹,作为TFTP服务器的存储位置,然后打开IPOP软件,开启服务. 图片中 编号3 的 ...
- 每天一个linux命令(26):用SecureCRT来上传和下载文件
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...
- 每天一个linux命令(26)--用SecureCRT来上传和下载文件
用SSH管理Linux 服务器时经常需要远程与本地之间交互文件,而直接使用 SecureCRT 自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmod ...
- 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...
随机推荐
- Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
- 跨域调用接口的方法之一:$.ajaxSetup()
跨域查询接口的数据,之前在公司时有发生过,产生的原因是,本地请求的域名或IP地址不一致,解除方法,也是修改域名和IP地址.比如: 接口中的数据来自IP地址:192.168.1.23/get.php 如 ...
- mongodb安装失败与解决方法(附安装教程)
安装mongodb遇到的一些坑 浪费了大量的时间 在此记录一下 主要是电脑系统win10企业版自带的防火墙 当然还有其他的一些坑 一般的问题在第6步骤都可以解决,本教程的安装步骤不够详细的话 ...
- 使用VSTS的Git进行版本控制(一)——复制现有仓库
使用VSTS的Git进行版本控制(一)--复制现有仓库 概述 Team Services支持两种类型的版本控制Git和Team Foundation Version Control (TFVC).以下 ...
- MySQL 查看用户授予的权限
在MySQL中,如何查看一个用户被授予了那些权限呢? 授予用户的权限可能分全局层级权限.数据库层级权限.表层级别权限.列层级别权限.子程序层级权限.具体分类如下: 全局层级 全局权限适用于一个给定 ...
- Oracle完全复制表结构的存储过程
最近在处理一个分表的问题时,需要为程序创建一个自动分表的存储过程,需要保证所有表结构,约束,索引等等一致,此外视图,存储过程,权限等等问题暂不用考虑. 在Mysql中,创建分表的存储过程,相当简单:c ...
- C#实现CRC校验
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web; ...
- Shell编程基础知识(一)
一.基本的运行Linux程序的3种方法: (1) 使文件具有可执行权限,直接运行文件.eg: chmod a+x testfile.sh ./testfile.sh (2) 直接调用命令解释器来 ...
- LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367).给定正整数num,写一个函数,如果num是一个完美的正方形 ...
- [福大软工] Z班 第13次成绩排行榜
注:本次成绩排行榜是针对华为软件云评测博客 作业要求 http://www.cnblogs.com/easteast/p/7772637.html 评分细则 (1)寻找软件的bug,功能的评测与黑箱测 ...