【问题标题】:Upload big video from PhotoLibrary to server将大视频从 PhotoLibrary 上传到服务器
【发布时间】:2013-03-14 19:20:41
【问题描述】:

我在从 PhotoLibrary 将大视频资产上传到服务器时遇到问题。

我的资产数据为described here,将视频导出到本地文档,然后上传。

但是当我上传一个大视频(2分钟,大约300Mb或更大)时,这种方法会导致崩溃,我没有任何理由也没有任何信息。

我使用webDAV来上传文件是这样的:

    // Set up credentials
    NSURLCredential *userCredentials = [NSURLCredential credentialWithUser:username
                                                                  password:password
                                  persistence:NSURLCredentialPersistenceForSession];
    NSURLProtectionSpace *space = [[NSURLProtectionSpace alloc] initWithHost:host
                                                                        port:80
                                                                    protocol:@"http"
                                                                       realm:@" webDAV"
                                                        authenticationMethod:nil];
    [[NSURLCredentialStorage sharedCredentialStorage] setCredential:userCredentials forProtectionSpace:space];
    [space release];

    // Create the request
    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PUT"];
    [request setValue:[self mimetypeForFile:self.filepath] forHTTPHeaderField:@"Content-Type"];
    NSNumber *contentLength = (NSNumber *) [[[NSFileManager defaultManager]
                                             attributesOfItemAtPath:self.filepath error:NULL]
                                            objectForKey:NSFileSize];
    [request setValue:[contentLength description] forHTTPHeaderField:@"Content-Length"];

    if (self.useStreaming)
    {
        if (self.currentFileStream!=nil)
        {
            [self.currentFileStream close], self.currentFileStream = nil;
        }
        self.currentFileStream = [NSInputStream inputStreamWithFileAtPath:self.filepath];

        if (currentFileStream!=nil)
        {
            [request setHTTPBodyStream:currentFileStream];
        }
        else
        {
            [request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];
        }
    }
    else
    {
        [request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];
    }



    NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (self.currentConnection!=nil)
    {
        self.currentConnection = nil;
    }
    self.currentConnection = conn;
    [conn release];
    [self.currentConnection start];

当代码到达这一行时:

self.currentFileStream = [NSInputStream inputStreamWithFileAtPath:self.filepath]; [request setHTTPBodyStream:currentFileStream];

或者:

[request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];

它崩溃了。

你有什么建议吗?

谢谢。

==========================

编辑:它在setHTTPBody:setHTTPBodyStream: 崩溃 所以我认为这是关于内存泄漏什么的。

=================

EDIT2: 现在我决定压缩视频,我通过当前方法得到的视频数据太大(超过300mb),但我发现使用UIImagePickerController选择相同的视频,它只有30mb ; 所以压缩是有帮助的; 我会试试UIVideoEditorController,很快就会发布我的结果;

【问题讨论】:

    标签: ios video upload photolibrary


    【解决方案1】:

    已完成。解决方法是尝试将大视频压缩成小文件;

    1.和之前一样,将视频资源导出到tmp目录;

    2.使用UIVideoEditorController压缩视频文件;

    3.只需像我发布的代码一样上传压缩文件。

    就是这样。

    【讨论】:

      【解决方案2】:

      查看以下帖子,我在服务器上上传图片,而不是图片,您可以发布您的视频Uploading Image via POST in Objective C

      【讨论】:

      • 感谢您的回答。我已阅读但没有找到解决方案;我的意思是我可以像我描述的那样通过 webDAV 将 PhotoLibrary 中的视频(小尺寸)/图像资产成功上传到服务器;但是当涉及到大尺寸的视频资产时,它就会崩溃。有什么方法可以从 PhotoLibrary 上传大尺寸的视频资源?
      • 您可以创建该资产的 zip 文件以比较大小。然后你可以上传它。或者你可以把你的数据分成小包然后上传。
      • 我完成了,通过UIVideoEditorController压缩视频资源,然后上传。我尝试将数据分成小包,但服务器不支持将这些小文件合二为一;还是谢谢你们,祝你好运