Получить размер файла при загрузке с FTP
Я тестирую проект 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 ответа
Чтобы получить размер файла, вам просто нужно:
case NSStreamEventOpenCompleted: {
fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue];}
Кстати, вы знаете, как получить дату модификации файла на FTP-сервере?
Я совершенно уверен, что когда вы устанавливаете kCFStreamPropertyFTPFetchResourceInfo, это означает, что вас интересует только размер ресурсов в этом конкретном запросе.
вам, вероятно, следует создать новый контроллер, который является подклассом GetController, назовите его StatController... override _startReceive и обработчик потока для ваших новых методов.
используйте StatController, чтобы получить размер ресурса перед началом асинхронной загрузки.