从PhotoLibrary上传大视频到服务器

问题描述:

我有一个从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: OR setHTTPBodyStream: 所以我认为这是关于内存泄漏或者其他的东西。

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

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

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

1.就像以前一样,将视频资源导出到tmp目录;使用UIVideoEditorController来压缩视频文件;

3.just上传压缩文件,就像我发布的代码。

就是这样。

检查下面的帖子,我在哪里上的服务器上传图像,而不是像你可以发表你的视频Uploading Image via POST in Objective C

+0

谢谢你的回答。我读过它但找不到解决办法;我的意思是我可以像我描述的那样通过webDAV成功地将PhotoLibrary(小尺寸)/图像资源从PhotoLibrary上传到服务器;但是当涉及大尺寸视频资产时,它会崩溃。有没有办法从PhotoLibrary上传大尺寸视频资产? – traximus 2013-03-26 01:53:36

+0

或者您可以创建该资产的zip文件来合成大小。那么你可以上传它。或者你可以将你的数据分成小包并上传。 – 2013-03-26 04:00:04

+0

我完成了它,通过UIVideoEditorController压缩视频资源,然后上传。我试图将数据分成小包,但服务器不支持将这些小文件合并成一个;谢谢你一切,最好的祝愿 – traximus 2013-03-26 10:27:08