上传从iPhone到Web服务器的大型视频(Uploading a large video from

2019-08-02 11:48发布

我试图从iphone大型视频上传到了PHP脚本的Web服务器。

我使用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);

我到底做错了什么?请帮帮忙!

我坚持了这个问题!

提前致谢,

苏拉杰

Answer 1:

我有自己的问题球员。 其实,我是在同一时间发送视频的不同块。 而问题是,因为所产生的视频的后期大块视频的第一块之前到达服务器。

我通过发送到达后,才第一个块Web服务器和响应在客户端有视频的第二块解决了这个问题。



文章来源: Uploading a large video from iphone to web server