php - 从iPhone将大型视频上传到Web服务器

标签 php objective-c ios video file-upload

我正在尝试将大型视频从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);

我在这里做错了什么?,请帮忙!

我被这个问题困住了!!

提前致谢,

苏拉杰

最佳答案

我自己遇到了问题。实际上,我同时发送了不同的视频块。出现问题的原因是,随后的视频块在第一部分视频之前到达服务器。

我仅在第一个视频块到达Web服务器并且在客户端获得响应后才发送第二个视频块,从而解决了该问题。

关于php - 从iPhone将大型视频上传到Web服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288969/

相关文章:

ios - SF UI 显示在 Xcode 上不起作用?

javascript - $.ajax 是否替代 $(document).ready(function()?

php - 从 cron 作业启动的命令行一次运行多个 PHP 脚本

javascript - InnerHTML 创建问题,未按正确顺序加载,可能存在处理问题

ios - 从 JPEG-2000 创建 openGL 纹理的快速方法?

ios - UIImageView 覆盖单元格中的文本

ios - didSelectViewController 不起作用

php - 将不同SQL Access 记录的值取为1

iphone - 自定义字体在我的应用程序中不起作用?

ios - 多个 stringByReplacingOccurrencesOfString 的有效方法