ftp上传图片的简单用法
来源:互联网 发布:hbuilder for mac下载 编辑:程序博客网 时间:2024/03/29 16:12
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
图片的路径 0 0
- ftp上传图片的简单用法
- 简单的图片上传
- 图片上传Ftp遇到的几个错误
- 简单的ftp 自动上传脚本
- java FTP 上传文件的简单例子
- windows上的ftp上传,简单,方便
- 简单的ftp上传文件客户端
- java的简单ftp上传文件案例
- ftp的简单使用-上传失败
- android ftp图片上传
- ftp上传图片
- Android FTP上传图片
- ThinkPHP FTP图片上传
- smartUpload上传图片的用法
- FTP上传简单示意
- 上传图片的简单方法
- 简单的Zend_File图片上传
- tp5简单的图片上传
- POJ 2528 Mayor's posters (线段树+离散化)
- ADNROID XML图像资源文件详细讲解(五)
- bzoj 1199 二分暴力
- 将 res 资源文件转换成 file
- C/C++语言 void 及 void 指针深层探索
- ftp上传图片的简单用法
- aapt简介及常用命令
- 简单实现类似Spring的在任意代码中获取Request的功能
- Javadoc导出java类的文档结构小结
- Watson之心:DeepQA
- HDU 5372 Segment Game(2015 Multi-University Training Contest 7 1004)
- vivado中改变代码字体的大小
- 在任意线程给Handler发送的消息为什么会在创建Handler的那个线程被执行?
- webservice使用get请求