将大型视频从iPhone上传到网络服务器

问题描述:

我试图从iphone上传一个大型视频到一个具有php脚本的网络服务器。将大型视频从iPhone上传到网络服务器

我使用NSInputStream获取文件视频块,我创建的

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode 

方法的每个遍历一个请求(POST),以作为参数传递的读取数据。

下面是我用得到的数据

- (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); 

我在做什么错误?请帮忙!

我被困在这个问题!

由于事先

苏拉杰

+0

嗨,苏然。我也想从iPhone上以大块数据的形式上传大视频到网页服务器。你是怎么做到的?你有任何教程或任何工作示例代码? – iKT

+0

嗨iOSDev,我上面发布的代码是将大型视频发布到服务器的工作代码。使用输入流,将视频数据作为数据片读取,并使用NSURLConnection将其发送到服务器。在服务器上,编写一个php文件来合并这些块。 – Suran

+0

@Suran,你可以用循环发布完整的代码发送数据,我认为这只是块逻辑,如果你可以用逻辑发布你的所有函数,那么它会非常有用。 –

我有自己的问题球员。实际上,我在同一时间发送不同的视频块。问题出现了,因为后面的视频块在第一部分视频之前到达了服务器。

我解决了这个问题,只有在第一个块到达web服务器并且在客户端得到响应后才发送第二块视频。

+0

你是如何在不同的时间发送不同的数据块的。 – Rajneesh071

+0

在发布的问题代码中,检查切换案例NSStreamEventHasBytesAvailable。在那一部分,我正在阅读大量的视频数据并将它们发送到服务器。 – Suran

+0

但它会在相同的时间发送。 – Rajneesh071