Я пытаюсь загрузить большое видео с iphone на веб-сервер с php-скриптом.
Я использую NSInputStream
для получения фрагментов видеофайлов, и я создаю запрос (POST) на каждом обходе
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
метод с данными чтения, переданными как параметр.
Вот код, который я использую, чтобы получить куски данных
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { switch(eventCode) { case NSStreamEventHasBytesAvailable: { NSMutableData *dataSlice; uint8_t buf[1048576]; unsigned int len = 0; len = [(NSInputStream *)stream read:buf maxLength:1048576]; if(len) { dataSlice = [NSMutableData dataWithBytes:(const void *)buf length:len]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:folderNameForUpload, kFolderName, @"abcd.MOV", kFileName, @"MOV", kFileType, nil]; MKNetworkOperation *op = [self.networkEngine operationWithPath:@"upload.php" params:params httpMethod:@"POST"]; [op addData:dataSlice forKey: @"file" mimeType: @"image/mov" fileName: @"abcd"]; [op onCompletion:^(MKNetworkOperation *completedOperation) { } onError:^(NSError *error) { }]; [[WebRequest sharedInstance].networkEngine enqueueOperation: op]; } else { NSLog(@"NO MORE BUFFER!"); } break; } case NSStreamEventEndEncountered: { [stream close]; [stream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [stream release]; stream = nil; break; } } }
Он отправляет данные на сервер, и я могу записать куски в файл. Но проблема в том, что если есть более одного фрагмента, файл будет поврежден, и я не смогу открыть видеофайл.
Я проверил размер файла как на сервере, так и на клиенте, и оба они точно такие же.
Ниже приведен скрипт php, который я использую для объединения фрагментов видеофайлов.
$tmp_file = $_FILES['file']['tmp_name']; $write_handle = fopen($fileURL, "ab+"); $read_handle = fopen($tmp_file, "rb"); $contents = fread($read_handle, filesize($tmp_file)); fwrite($write_handle, $contents); fclose($write_handle); fclose($read_handle);
Что я здесь делаю неправильно? Пожалуйста, помогите!
Я застрял над этой проблемой !!
Заранее спасибо,
Сураджа
У меня проблемы с парнем. На самом деле, я отправлял разные куски видео одновременно. И проблема возникла из-за того, что более поздние фрагменты видео достигли сервера до первого фрагмента видео.
Я решил проблему, отправив второй кусок видео только после того, как первый кусок достигнут веб-сервера, и ответ получен на стороне клиента.