Ошибка открытого потока в SimpleFTPSample, представленная в документации Apple

Я хочу загрузить изображения на сервер через ftp.

Я нашел документацию SimpleFTPSample в яблоке и загрузил ее.

При запуске приложения (я использую xcode 4.5.2, целевой симулятор iphone 5.0) он отлично работает. Я пытаюсь создать каталог на своем сервере через это приложение и преуспел.

Но при загрузке изображения, представленного в приложении, будет возникать «ошибка открытого потока». Я не делал никаких изменений в приложении. Просто введите url, имя пользователя и пароль. Я думаю, что с этим нет никаких проблем, поскольку каталог, который я указал, был создан успешно.

При создании каталога URL-адрес «ftp://54.xyz/newfolder/» создается успешно.

Но при загрузке URL-адреса «ftp://54.xyz/TestImage1.png»

путь к файлу: "/var/folders/pn/8p0jc4qn70v37j58c1kwf8l80000gn/T/TestImage1.png"

url получен путем добавления последней строки компонента с указанным мной ftp url.

Итак, что в этом ошибка?

В fn,

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { case NSStreamEventErrorOccurred: { [self stopSendWithStatus:@"Stream open error"]; } break; 

была вызвана и отображена ошибка открытия потока.

Я googled целый день и никаких необходимых результатов. Это очень срочно, и я даже не могу начать щедрость за это. Пожалуйста помоги

Попробуй это….

  - (void)sendDidStart { // self.statusLabel.text = @"Sending"; [[NetworkManager sharedInstance] didStartNetworkOperation]; } - (void)updateStatus:(NSString *)statusString { assert(statusString != nil); //self.statusLabel.text = statusString; } - (void)sendDidStopWithStatus:(NSString *)statusString { if (statusString == nil) { statusString = @"Put succeeded"; } [[NetworkManager sharedInstance] didStopNetworkOperation]; } #pragma mark * Core transfer code // This is the code that actually does the networking. // Because buffer is declared as an array, you have to use a custom getter. // A synthesised getter doesn't compile. - (uint8_t *)buffer { return self->_buffer; } - (BOOL)isSending { return (self.networkStream != nil); } - (void)startSend:(NSString *)filePath { BOOL success; NSURL * url; NSLog(@"localFilePathforImage..:%@",localFilePathforImage); assert(localFilePathforImage != nil); assert([[NSFileManager defaultManager] fileExistsAtPath:localFilePathforImage]); assert( [localFilePathforImage.pathExtension isEqual:@"png"] || [localFilePathforImage.pathExtension isEqual:@"jpg"] ); assert(self.networkStream == nil); // don't tap send twice in a row! assert(self.fileStream == nil); // ditto // First get and check the URL. url = [[NetworkManager sharedInstance] smartURLForString:@"ftp://80.544/"]; success = (url != nil); if (success) { // Add the last part of the file name to the end of the URL to form the final // URL that we're going to put to. url = CFBridgingRelease( CFURLCreateCopyAppendingPathComponent(NULL, ( CFURLRef) url, ( CFStringRef) imageString , false) ); success = (url != nil); } // If the URL is bogus, let the user know. Otherwise kick off the connection. if ( ! success) { // self.statusLabel.text = @"Invalid URL"; } else { // Open a stream for the file we're going to send. We do not open this stream; // NSURLConnection will do it for us. self.fileStream = [NSInputStream inputStreamWithFileAtPath:localFilePathforImage]; assert(self.fileStream != nil); [self.fileStream open]; // Open a CFFTPStream for the URL. self.networkStream = CFBridgingRelease( CFWriteStreamCreateWithFTPURL(NULL, ( CFURLRef) url) ); assert(self.networkStream != nil); // if ([self.usernameText.text length] != 0) { success = [self.networkStream setProperty:@"yourusername" forKey:(id)kCFStreamPropertyFTPUserName]; assert(success); success = [self.networkStream setProperty:@"password" forKey:(id)kCFStreamPropertyFTPPassword]; assert(success); //} self.networkStream.delegate = self; [self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [self.networkStream open]; // Tell the UI we're sending. [self sendDidStart]; } } - (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; } [self sendDidStopWithStatus:statusString]; } - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode // An NSStream delegate callback that's called when events happen on our // network stream. { #pragma unused(aStream) assert(aStream == self.networkStream); switch (eventCode) { case NSStreamEventOpenCompleted: { [self updateStatus:@"Opened connection"]; } break; case NSStreamEventHasBytesAvailable: { assert(NO); // should never happen for the output stream } break; case NSStreamEventHasSpaceAvailable: { [self updateStatus:@"Sending"]; // If we don't have any data buffered, go read the next chunk of data. if (self.bufferOffset == self.bufferLimit) { NSInteger bytesRead; bytesRead = [self.fileStream read:self.buffer maxLength:sSendBufferSize]; if (bytesRead == -1) { [self stopSendWithStatus:@"File read error"]; } else if (bytesRead == 0) { [self stopSendWithStatus:nil]; } else { self.bufferOffset = 0; self.bufferLimit = bytesRead; } } // If we're not out of data completely, send the next chunk. if (self.bufferOffset != self.bufferLimit) { NSInteger bytesWritten; bytesWritten = [self.networkStream write:&self.buffer[self.bufferOffset] maxLength:self.bufferLimit - self.bufferOffset]; assert(bytesWritten != 0); if (bytesWritten == -1) { [self stopSendWithStatus:@"Network write error"]; } else { self.bufferOffset += bytesWritten; } } } break; case NSStreamEventErrorOccurred: { [self stopSendWithStatus:@"Stream open error"]; } break; case NSStreamEventEndEncountered: { // ignore } break; default: { assert(NO); } break; } } 

У меня такая же проблема.

Это для хостинг-провайдера. Я думаю, проблема в том, что код может быть запутан знаком «@» в имени входа = [email protected].?

Вы используете имя пользователя с помощью @ sing?

Добавление этой строки перед установкой делегата networkStream в PutController.m StartSend исправил проблему для меня:

 [self.networkStream setProperty:(id)kCFBooleanFalse forKey:(id)kCFStreamPropertyFTPUsePassiveMode]; 

Без указанной выше строки (или с свойством, заданным kCFBooleanTrue вместо kCFBooleanFalse), я последовательно получил сообщение об ошибке Stream Open. Я только пытался с одним FTP-сервером, но он, похоже, не поддерживает пассивный режим, который, по-видимому, по умолчанию.

  • Загрузка ios FTP при помощи NSURLSession
  • Загрузка нескольких файлов на FTP через AFNetworking
  • удалить файл на ftp-сервере из приложения iphone
  • Как загрузить изображение .png или .jpg на ftp-сервере в ios.?
  • Ошибка таймаута сервера BlackRaccoon и WhiteRaccon
  • Загрузка содержимого каталога FTP в ios
  • Отправка данных по FTP
  • Interesting Posts

    Ошибка Segue – не удалось вызвать назначенный инициализатор в классе nsmanagedobject

    Отключение UIActionSheet от UIBarButtonItem на iPad

    Подкласс NSObject в Swift – лучшая практика с инициализаторами

    Как программно изменить клавиатуру в iOS?

    Keypath не найден при сортировке с несколькими ключами с магической записью

    Определить состояние приложения при одновременном нажатии кнопки home с запуском приложения

    UIScrollView отправляет касания к subviews

    Как найти пули или пронумерованные маркеры в NSString с помощью NSRegularExpressionSearch?

    UIBlurEffect в пользовательской модальной презентации

    iOS и xcode: как дать segue «идентификатор раскадровки», чтобы я мог программно манипулировать им

    Данные приложения заметок доступа

    Obj-C: Как сделать кеш без ключей

    Список всех файлов gif в библиотеке фотографий

    iOS – переменная pushViewController vs presentModalViewController

    Невозможно установить привязку (в: UITableView) с помощью переменной RxSwift asObservable ()

    Давайте будем гением компьютера.