iOS - FTPManager的简单使用及常见问题

FTP是一个重要的文件传输协议,在电脑上比较常用些,今天介绍一下iOS上一个好用的FTPManager

�简介

FTPManager 是一个很方便的第三方FTP工具,使用它我们可以轻松的使用ftp协议传输文件到服务器;当然,增删改查都可以,不过下面只介绍下上传的步骤,其它的大同小异~

代码

// 导入头文件
#import "FTPManager.h"

定义FTP地址,用户名和密码

#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?)

出现这个错误的情况,我遇到的有两种情景

  • 一、文件已存在 简单来说,我们给需要上传的文件起的名字,在服务器对应的路径下已经存在,改个名字再传一遍就好。
  • 二、服务器问题 与后台的同事沟通后无果,因为我们得知的错误就只有上面的那个提示,并其它的信息,也就无法给后台同事更多的信息。我也试过在源码里一路追踪下去,只知道它在打开流的时候失败了。所以我就试了一下终端来进行FTP的操作

先连接好FTP服务器,输入dir查看目录,这时120服务器(就是120开头的ip)的目录一下子就出来了。

120服务器

再来看211服务器这边,敲完指令就卡住在这了,而且我们发现ip地址不对,是内网的ip

211服务器

过了20秒左右列表就�列出来了,但是报200

211服务器 200

截图给后台同事一看就明了了,修复完就可以用了,具体怎么解决我也不知道,毕竟我不是从事这一方向的,也没参与后台的工作。

同事给出的�解释:FTP主动 被动模式,需要设置传输链路的地址和端口

有兴趣的可以看下200如何解决:200 PORT command successful. Consider using PASV

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据之美

使用 django-blog-zinnia 搭建个人博客

django-blog-zinnia 虽然小巧,但是具备了个人博客应用的全部基础功能,且具有很高的拓展性,并且开箱即用。以下是官方列出的一些特性: 评论 站...

2879
来自专栏Seebug漏洞平台

使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器

来源:BypassingXSSFiltersusingXMLInternalEntities 原作者:DavidLitchfield (david@davidl...

38210
来自专栏逸鹏说道

并发编程~先导篇上

并发 :一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

1848
来自专栏一“技”之长

iOS网络编程之七——本地用户凭证Cookie的应用

    Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息。Cookie中的字段与意义由服务端进行定义。例如,当用户在某个网站进行了登录操作后,服...

1012
来自专栏iOS开发攻城狮的集散地

iOS CoreData (二) 版本升级和数据库迁移

NSMigratePersistentStoresAutomaticallyOption = YES,那么Core Data会试着把之前低版本的出现不兼容的持久...

24110
来自专栏北京马哥教育

利用anaconda搞定所有Python安装问题

很多人按照我之前的Python安装教程可以成功,但是方法之下必定有BUG,所以还有一部分人(电脑)无法配置成功,有没有一个软件可以自带一系列常用的安装包!!! ...

6216
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (1)

本文内容基本完全来自于Identity Server 4官方文档: https://identityserver4.readthedocs.io/ 官方文档很详...

46810
来自专栏DannyHoo的专栏

如何判断UITabBarController上的NavigationController没有被选中?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1261
来自专栏DannyHoo的专栏

OC中监听所有的UITextField文字的变化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1275
来自专栏DannyHoo的专栏

OC中清除缓存

上一篇文章是获取文件大小(http://blog.csdn.net/u010105969/article/details/53021768),本篇文章是清除缓...

1541

扫码关注云+社区