FTP是一個重要的文件傳輸協議,在電腦上比較經常使用些,今天介紹一下iOS上一個好用的FTPManagerhtml
FTPManager 是一個很方便的第三方FTP工具,使用它咱們能夠輕鬆的使用ftp協議傳輸文件到服務器;固然,增刪改查均可以,不過下面只介紹下上傳的步驟,其它的大同小異~git
// 導入頭文件
#import "FTPManager.h"
複製代碼
定義FTP地址,用戶名和密碼github
#define FTPURL @"192.168.1.1"
#define FTPUsername @"abc123"
#define FTPPSW @"abc123"
複製代碼
@implementation ViewController{
FMServer* server;
FTPManager* man;
NSString* filePath; // 上傳文件的路徑
BOOL succeeded; // 記錄傳輸結果是否成功
NSTimer* progTimer;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 上傳文件
[self uploadWithftpUrl:FTPURL ftpUsr:FTPUsername ftpPass:FTPPSW];
}
// 上傳
-(void)uploadWithftpUrl:(NSString*)url ftpUsr:(NSString*)user ftpPass:(NSString*)pass {
// 配置FTP服務器信息
server = [FMServer serverWithDestination:url username:user password:pass];
// 初始化定時器
progTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(changeProgress) userInfo:nil repeats:YES];
// 激活定時器
[progTimer fire];
// 調用開始上傳文件的方法
[self performSelectorInBackground:@selector(startUploading) withObject:nil];
}
-(void)startUploading {
// 初始化FTPManager
man = [[FTPManager alloc] init];
// 設置代理(非必須)
man.delegate = self;
// server.port = 21; // 能夠指定FTP端口
//建立上傳文件
UIImage *img = [UIImage imageNamed:@"abc"];
NSData * data = UIImagePNGRepresentation(img);
// 開始上傳並記錄結果
succeeded = [man uploadData:data withFileName:@"20173160007.png" toServer:server];
// NSString *path = @"/Users/lxf/Desktop/1114.txt";
// NSURL *fileUrl = [NSURL URLWithString:path];
// succeeded = [man uploadFile:fileUrl toServer:server];
[self performSelectorOnMainThread:@selector(uploadFinished) withObject:nil waitUntilDone:NO];
}
-(void)changeProgress {
if (!man) {
[progTimer invalidate];
progTimer = nil;
return;
}
NSLog(@"上傳進度:%@",man.progress);
}
// 上傳完畢,一切置空
-(void)uploadFinished {
[progTimer invalidate];
progTimer = nil;
filePath = nil;
server = nil;
man = nil;
}
@end
複製代碼
代理方法服務器
#pragma mark - FTPManagerDelegate
- (void)ftpManagerUploadProgressDidChange:(NSDictionary *)processInfo {
NSLog(@"%@", processInfo);
}
複製代碼
(ftp stream failed: general stream error (check credentials?)微信
出現這個錯誤的狀況,我遇到的有兩種情景ide
1、文件已存在 簡單來講,咱們給須要上傳的文件起的名字,在服務器對應的路徑下已經存在,改個名字再傳一遍就好。工具
2、服務器問題 與後臺的同事溝通後無果,由於咱們得知的錯誤就只有上面的那個提示,並其它的信息,也就沒法給後臺同事更多的信息。我也試過在源碼裏一路追蹤下去,只知道它在打開流的時候失敗了。因此我就試了一下終端來進行FTP的操做ui
先鏈接好FTP服務器,輸入dir查看目錄,這時120服務器(就是120開頭的ip)的目錄一會兒就出來了。 url
再來看211服務器這邊,敲完指令就卡住在這了,並且咱們發現ip地址不對,是內網的ip 過了20秒左右列表就列出來了,可是報200截圖給後臺同事一看就明瞭了,修復完就能夠用了,具體怎麼解決我也不知道,畢竟我不是從事這一方向的,也沒參與後臺的工做。spa
同事給出的解釋:FTP主動 被動模式,須要設置傳輸鏈路的地址和端口
有興趣的能夠看下200如何解決:200 PORT command successful. Consider using PASV