很久没更新文档了,1 : 确实很忙;2.自己学习的路还很长,知其然不知所以然的东西还很多。
知识点回顾
首先,我们来看下FTP相关定义:
- 文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。我们要分清文件传送(file transfer)和文件访问(file access)之间的区别,前者是FTP提供的,后者是如NFS等应用系统提供的。
- FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。
- FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。
- 运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。
Android中使用
在Android中我们可以使用第三方的库来操作FTP,比如Apache的包,commons-net-3.6.jar。下载地址http://commons.apache.org/proper/commons-net/download_net.cgi。
如何使用
- 初始化FTPClinet,代码如下:
ftpClient = new FTPClient();
2.设置登录地址和端口号,代码如下:
ftpClient.connect(TrackConstants.FTP_URL, TrackConstants.FTP_PORT);
3.设置登录用户名和密码,代码如下:
ftpClient.login(TrackConstants.FTP_USERNAME, TrackConstants.FTP_PWD);
4.设置文件类型和采用被动传输方式,代码如下:
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
5.传输文件,代码如下:
//文件上传吧~
FileInputStream fileInputStream = new FileInputStream(FilePath);
ftpClient.storeFile(FileName, fileInputStream);
6.关闭连接,代码如下:
//关闭文件流
fileInputStream.close();
//退出登陆FTP,关闭ftpCLient的连接
ftpClient.logout();
ftpClient.disconnect();
小提醒
主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。
Android FTP客户端核心代码如下:
new Thread() {
@Override
public void run() {
super.run();
try {
//1.要连接的FTP服务器Url,Port
ftpClient.connect(TrackConstants.FTP_URL, TrackConstants.FTP_PORT);
//2.登陆FTP服务器
ftpClient.login(TrackConstants.FTP_USERNAME, TrackConstants.FTP_PWD);
//3.看返回的值是不是230,如果是,表示登陆成功
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
//断开
ftpClient.disconnect();
return;
}
//设置存储路径
ftpClient.makeDirectory("/data/" + directory );
ftpClient.changeWorkingDirectory("/data/" + directory);
//设置上传文件需要的一些基本信息
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
// ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//文件上传吧~
FileInputStream fileInputStream = new FileInputStream(FilePath);
ftpClient.storeFile(FileName, fileInputStream);
//关闭文件流
fileInputStream.close();
//退出登陆FTP,关闭ftpCLient的连接
ftpClient.logout();
ftpClient.disconnect();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。
qrcode_for_gh_1ba0785324d6_430.jpg当然喜爱技术,乐于分享的你也可以可以添加作者微信号:
WXCD.jpeg
网友评论