Получить размер файла при загрузке с FTP - PullRequest
1 голос
/ 28 апреля 2011

Я тестирую проект « SimpleFTPSample » от Apple, чтобы понять, как работает ftp с iOS. я добавил две строки в «GetController.m», чтобы получить размер файла для загрузки.

-(void)_startReceive
{
.
.
.
  // Open a CFFTPStream for the URL.
  ftpStream = CFReadStreamCreateWithFTPURL(NULL, (CFURLRef) url);
  CFReadStreamSetProperty(ftpStream, kCFStreamPropertyFTPFetchResourceInfo, kCFBooleanTrue); // Added: To get file size
.
.
.
}

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
.
.
.
  switch (eventCode) {
    case NSStreamEventOpenCompleted: {
      // Added: Finally get filesize
      fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue]; 
      [self _updateStatus:@"Opened connection"];
    } break;
.
.
.
}

Теперь я получаю правильный размер файла (fileSize), но после этого загрузка не начнется. дело NSStreamEventHasBytesAvailable не будет обработано. как я могу заставить это работать? где провал? я хочу показать индикатор выполнения для состояния загрузки, поэтому мне нужен полный размер файла.

Я надеюсь, что вы можете помочь мне с этим. спасибо!

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Чтобы получить размер файла, вам просто нужно:

case NSStreamEventOpenCompleted: {
      fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue];}

Кстати, вы знаете, как получить дату изменения файла на FTP-сервере ??

0 голосов
/ 29 апреля 2011

Я вполне уверен, что когда вы устанавливаете kCFStreamPropertyFTPFetchResourceInfo, это означает, что вас интересует только размер ресурсов в этом конкретном запросе.

вы, вероятно, должны создать новый контроллер, который является подклассом GetController, назовите его StatController ... override _startReceive и обработчик потока для ваших новых методов.

используйте StatController, чтобы получить размер ресурса перед началом асинхронной загрузки.

...