从PhotoLibrary上传大视频到服务器

时间:2013-03-25 10:25:12

标签: ios video upload photolibrary

我在将大型视频资源从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];

OR:

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

它崩溃了。

你有什么建议吗?

感谢。

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

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

=====

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

2 个答案:

答案 0 :(得分:1)

<强>已完成。解决方案是尝试将大视频压缩为小文件;

1.像以前一样,将视频资产导出到tmp目录;

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

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

就是这样。

答案 1 :(得分:0)

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