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
原创粉丝点击