FTP文傳協議的應用,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);}