ftp上传图片的简单用法
2015-08-12 15:45
579 查看
enum { kSendBufferSize = 32768 }; typedef void(^blockDeatail)(NSString *str); @interface BKMyDetailViewController : BKRootViewController { uint8_t _buffer[kSendBufferSize]; }
@property (nonatomic, retain) NSOutputStream * networkStream; @property (nonatomic, retain) NSInputStream * fileStream; @property (nonatomic, assign) size_t bufferOffset; @property (nonatomic, assign) size_t bufferLimit; @property (nonatomic, readonly) uint8_t * buffer;
- (uint8_t *)buffer { return self->_buffer; }
- (void)picUp:(NSString *)filePath { BKFileManeger *manager = [BKFileManeger shareManager]; BKAccountPojo *pojo = manager.accountPojo; //公司自定制设置 BKCompanyCustomizedPojo *customManage = pojo.company.customized; NSURL *url; CFWriteStreamRef ftpStream; url = [NSURL URLWithString:customManage.ftpURL]; //添加后缀(文件名称) url = NSMakeCollectable(CFURLCreateCopyAppendingPathComponent(NULL, (CFURLRef) url, (CFStringRef) [filePath lastPathComponent], false)); //读取文件,转化为输入流 self.fileStream = [NSInputStream inputStreamWithFileAtPath:filePath]; [self.fileStream open]; //为url开启CFFTPStream输出流 ftpStream = CFWriteStreamCreateWithFTPURL(NULL, (CFURLRef) url); self.networkStream = (NSOutputStream *) ftpStream; //设置ftp账号密码 [self.networkStream setProperty:customManage.ftpUsername forKey:(id)kCFStreamPropertyFTPUserName]; [self.networkStream setProperty:customManage.ftpPassword forKey:(id)kCFStreamPropertyFTPPassword]; //设置networkStream流的代理,任何关于networkStream的事件发生都会调用代理方法 self.networkStream.delegate = self; //设置runloop [self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [self.networkStream open]; //完成释放链接 //CFRelease(ftpStream); } #pragma mark 回调方法 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { //aStream 即为设置为代理的networkStream switch (eventCode) { case NSStreamEventOpenCompleted: { NSLog(@"NSStreamEventOpenCompleted"); } break; case NSStreamEventHasBytesAvailable: { NSLog(@"NSStreamEventHasBytesAvailable"); assert(NO); // 在上传的时候不会调用 } break; case NSStreamEventHasSpaceAvailable: { NSLog(@"NSStreamEventHasSpaceAvailable"); NSLog(@"bufferOffset is %zd",self.bufferOffset); NSLog(@"bufferLimit is %zu",self.bufferLimit); if (self.bufferOffset == self.bufferLimit) { NSInteger bytesRead; bytesRead = [self.fileStream read:self.buffer maxLength:kSendBufferSize]; if (bytesRead == -1) { //读取文件错误 [self _stopSendWithStatus:@"读取文件错误"]; } else if (bytesRead == 0) { //文件读取完成 上传完成 [self _stopSendWithStatus:nil]; } else { self.bufferOffset = 0; self.bufferLimit = bytesRead; } } if (self.bufferOffset != self.bufferLimit) { //写入数据 NSInteger bytesWritten;//bytesWritten为成功写入的数据 bytesWritten = [self.networkStream write:&self.buffer[self.bufferOffset] maxLength:self.bufferLimit - self.bufferOffset]; assert(bytesWritten != 0); if (bytesWritten == -1) { [self _stopSendWithStatus:@"网络写入错误"]; } else { self.bufferOffset += bytesWritten; } } } break; case NSStreamEventErrorOccurred: { [self _stopSendWithStatus:@"Stream打开错误"]; assert(NO); } break; case NSStreamEventEndEncountered: { // 忽略 } break; default: { assert(NO); } break; } } //结果处理 - (void)_stopSendWithStatus:(NSString *)statusString { if (self.networkStream != nil) { [self.networkStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; self.networkStream.delegate = nil; [self.networkStream close]; self.networkStream = nil; } if (self.fileStream != nil) { [self.fileStream close]; self.fileStream = nil; } NSLog(@"上传成功"); }
filePath
图片的路径
相关文章推荐
- 【PHP框架CodeIgniter学习】使用辅助函数—建立自己的JSONHelper
- Yii2.0中文开发向导——查询条件Where全解析
- PHP语法基础
- PHP异常处理
- php-单例模式实现mysql实例化对象
- Post data using ajax in laravel 5
- php之curl学习
- wamp环境下phpmyadmin拒绝访问
- php数组学习之in_array() 函数查找数组中是否存在某个值
- phpcms常用函数
- thinkPHP 中去除URL中的index.php
- PHP 5.3以上版本推荐使用mysqlnd驱动
- PHP_PHP统计图插件-libchart
- thinkphp 验证码的使用
- 基于PHP QR Code生成带不失真logo二维码
- PHP_PHP开发框架-opencart
- PHP_PHP开发框架-codeigniter
- PHP_PHP开发框架-Phalcon
- PHP_PHP开发框架-Symfony
- PHP_PHP开发框架-Laravel