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 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

独家 | 一文读懂Hadoop(二)HDFS(上)

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发...

3358
来自专栏移动端周边技术扩展

Cocoapods生成静态库(完整)

1515
来自专栏算法channel

HDFS|基本概念和读写原理

01 — HDFS设计目的 A distributed file system that provides high-throughput access to ...

3117
来自专栏架构师小秘圈

HDFS极简教程

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Goog...

3226
来自专栏AI星球

机器学习程序猿在Linux猩球的生存指南

一个小程序猿,在一场飞行意外中,坠落到Linux猩球,与家乡Win猩球/Mac猩球的绚丽多彩不同的是:Linux猩球大部分时间都是处于黑暗之中[命令行/Shel...

524
来自专栏Python中文社区

基于docker+gunicorn部署sanic项目

最近云服务提供商在打价格战,我在某云上花了很少的钱租了一个月的云服务器: 公网ip是: 116.85.42.182, 以下我以116.85.42.182这个ip...

892
来自专栏xingoo, 一个梦想做发明家的程序员

手把手教你cuda5.5与VS2010的编译环境搭建

目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步...

2057
来自专栏phodal

使用 OpenWhisk 自建 Serverless 服务

在尝试了使用 AWS 开发 Serverless 应用之后,我便想尝试使用 OpenWhisk 框架来搭建自己的 Serverless 服务。 Apache O...

2995
来自专栏CSDN技术头条

大数据技术Hadoop面试题,看看你能答对多少?答案在后面

单项选择题 1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode b)Jobtracker c)Datanode d)secondaryNameN...

24210
来自专栏LanceToBigData

TCP/IP中你不得不知的十大秘密

这段时间 有一点心很浮躁,不过希望自己马上要矫正过来。好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一、TCP/IP模型 TCP...

1876

扫码关注云+社区