FTP文传协议的应用
我开发的项目中一直用到都是AFNetworking上传图片的方法,最近老大说要用FTP上传,网上的资料很少,毕竟这种上传方式现在用的不多了,于是花了一天时间学习了FTP文件传输协议。下面是我的个人理解:
首先介绍下FTP是个什么东东?
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。 基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载" (Download)和"上传"(Upload)。"下载"文件就是从远程主机(可以理解为另一个服务器)拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至 远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。(摘自百度)注:若使用本机FTP地址,那么本机就相当于一个远程主机。
多说无益,下面我就已上传相册中的图片到FTP:
1,在上传之前肯定是要打开FTP
用FTP的话,高版本的mac os默认关掉了,可以用如下命令打开:
sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist
相应的,要关闭则:
sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist Mac自带的服务器工具可以查看FTP文件:教程http://jingyan.baidu.com/article/7c6fb42869cd2380642c90af.html (访问的用户名和密码是登录mac系统的用户名和密码)。
2,在马代码之前需要下载一个第三方FTP文件管理SDK https://github.com/ZCasey/GRRequestsManager
3,开始马代码!
思路:a.从相册中取出照片存入指定文件夹(应用中)
b.在ftp中创建文件夹,再将图片上传至此文件夹中
data = dataImage;
NSDateFormatter *formate = [[NSDateFormatter alloc] init];
formate.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *documentPath = [NSHomeDirectory() stringByAppendingPathComponent:@"document"];
//打开文件管理器
NSFileManager *fileMange = [NSFileManager defaultManager];
//创建文件夹
[fileMange createDirectoryAtPath:documentPath withIntermediateDirectories:YES attributes:nil error:nil];
//创建文件
NSString *localpath =[NSString stringWithFormat:@"%@/%@.jpg",documentPath,[formate stringFromDate:[NSDate date]]];
NSLog(@"图片路径 %@ :",localpath)
[fileMange createFileAtPath:[NSString stringWithFormat:@"%@/%@.jpg",documentPath,[formate stringFromDate:[NSDate date]]] contents:data attributes:nil];
//(需引入头文件#import "GRRequestsManager.h")
GRRequestsManager * requestManager = nil;
//设置FTP请求
requestManager = [[GRRequestsManager alloc] initWithHostname:@"ftp://********" user:@"*****" password:@"*********"];
//FTP设置代理
requestManager.delegate = self;
//创建目录层上传文件
[requestManager addRequestForCreateDirectoryAtPath:@"ZZTest"];
[requestManager startProcessingRequests];
NSString *ftpPath = [NSString stringWithFormat:@"ZZTest/11111.jpg"]
[self.requestManager addRequestForUploadFileAtLocalPath:localpath toRemotePath:ftpPath];
[self.requestManager startProcessingRequests];
GRRequestsManager的代理方法
#pragma mark - GRRequestsManagerDelegate
- (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didScheduleRequest:(id<GRRequestProtocol>)request
{
NSLog(@"1_requestsManager:didScheduleRequest:");
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteListingRequest:(id<GRRequestProtocol>)request listing:(NSArray *)listing
{
NSLog(@"2_requestsManager:didCompleteListingRequest:listing: \n%@", listing);
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteCreateDirectoryRequest:(id<GRRequestProtocol>)request
{ //新建文件夹成功
NSLog(@"3_requestsManager:didCompleteCreateDirectoryRequest:");
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteDeleteRequest:(id<GRRequestProtocol>)request
{
NSLog(@"4_requestsManager:didCompleteDeleteRequest:");
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompletePercent:(float)percent forRequest:(id<GRRequestProtocol>)request
{
NSLog(@"5_requestsManager:didCompletePercent:forRequest: %f", percent);
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteUploadRequest:(id<GRDataExchangeRequestProtocol>)request
{ //文件上传成功
NSLog(@"6_requestsManager:didCompleteUploadRequest:");
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteDownloadRequest:(id<GRDataExchangeRequestProtocol>)request
{
NSLog(@"7_requestsManager:didCompleteDownloadRequest:");
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didFailWritingFileAtPath:(NSString *)path forRequest:(id<GRDataExchangeRequestProtocol>)request error:(NSError *)error
{
NSLog(@"8_requestsManager:didFailWritingFileAtPath:forRequest:error: \n %@", error);
} - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didFailRequest:(id<GRRequestProtocol>)request withError:(NSError *)error
{
NSLog(@"9_requestsManager:didFailRequest:withError: \n %@", error);
}
FTP文传协议的应用的更多相关文章
- FTP传输协议的应用详解
FTP的目标:1)促进程序.数据文件按的共享;2)鼓励使用远程计算机;3)使用户不必面对不同主机上不同文件系统的差异;4)对数据进行高效可靠的传输FTP的作用:就是让用户连接上一个远程计算机,察看远程 ...
- 在html页面中利用ftp访问协议格式载入服务器图片
访问格式为:ftp://用户名:密码@服务器ip:服务器端口/具体文件路径 如下所示: <img src="ftp://lxj:123@127.0.0.1:21/IMG_2013051 ...
- ftp (文件传输协议)
ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...
- FTP协议详解(转)
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application ...
- 转FTP协议详解
转自:http://www.cnblogs.com/li0803/archive/2010/11/16/1878833.html FTP 是File Transfer Protocol(文件传输协议) ...
- Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )
https://blog.csdn.net/buster_zr/article/details/80244542 FTP FTP 是 File Transfer Protocol (文件传输协议)的英 ...
- MQTT协议 局域网和广域网 云服务器和虚拟主机、VPS SSH和FTP、SFTP
MQTT协议 MQTT协议就很好的解决了coap存在的问题.MQTT协议是由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议.MQTT协议采用发布/订阅模式,所有的物联网终端都通过TC ...
- 计算机网络之文件传送协议FTP
FTP 文件传送协议FTP(File Transfer Protocol)是因特网上使用最广泛的文件传送协议. FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限.FTP ...
- 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
随机推荐
- Java之多线程同步基础
java学习的道路上呢总有一些麻烦的东西需要花费一些时间去理解,比如个人认为不好搞的多线程. 线程是并列运行的 因为是并列运行,所以有时候会发生资源抢占,从而导致参数变化; 比如酱紫 package ...
- PostgreSQL - 用psql 运行SQL文件
对于预先写好的SQL文件,比如/home/user1/updateMyData.sql, 可以有两种方式来运行这个SQL文件. 方式一:连接db后执行SQL文件 首先通过psql连接到对应的db: p ...
- 为GitHub项目添加协议
解决方法 如果一开始在GitHub上创建仓库时没有添加协议,可以用以下方式来重新添加相关的协议: 打开GitHub上的某个仓库,点击Create new file: 在新建文件的页面上,输入文件名LI ...
- PostgreSQL-13-缺失值处理
-- 1.查看缺失值CREATE TABLE dnull AS SELECT * FROM data; -- 复制数据SELECT * FROM dnull WHERE 房屋编码 IS NULL OR ...
- 利用arguments对象在javaScript中实现重载(overload)
一些概念: 重载(overload): 什么是: 相同函数名,不同参数列表的多个函数,在调用时,可根据传入参数的不同,自动选择对应的函数调用! 为什么: 减轻调用者的负担,一个函数名,可执行多种操作 ...
- Codeforces Round #546 (Div. 2) B. Nastya Is Playing Computer Games
链接:https://codeforces.com/contest/1136/problem/B 题意: 有n个井盖,每个井盖上有一个小石头. 给出n和k,k表示刚开始在第k个井盖上方. 有三种操作, ...
- 头部和信号栏一个颜色appcloud
<header id="header" > <ul > <li class="active" onclick="api. ...
- 开源GIS-对比GeoServer和MapServer
1 主流组合: 基于C.C++系列的:Mapserver(服务器)+QGIS(桌面软件)+PostGIS(数据库)+Openlayers(JS)/ openscale (FLex)(浏览器客户端) ...
- C# 枚举类型的描述信息获取
新建一个控制台方法,写好自己的枚举类型: 如图: 在里面添加获取描述的方法: 具体源码: 链接:http://pan.baidu.com/s/1nv4rGkp 密码:byz8
- 開玩樹莓派(一):安裝Raspbian系統
目錄: 開玩樹莓派(一):安裝Raspbian系統 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程 開玩樹莓派(三):Python編程 開玩樹莓派(四):GPIO控制和遠程 ...