我有一个从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
,并且会很快发布我的结果;
谢谢你的回答。我读过它但找不到解决办法;我的意思是我可以像我描述的那样通过webDAV成功地将PhotoLibrary(小尺寸)/图像资源从PhotoLibrary上传到服务器;但是当涉及大尺寸视频资产时,它会崩溃。有没有办法从PhotoLibrary上传大尺寸视频资产? – traximus 2013-03-26 01:53:36
或者您可以创建该资产的zip文件来合成大小。那么你可以上传它。或者你可以将你的数据分成小包并上传。 – 2013-03-26 04:00:04
我完成了它,通过UIVideoEditorController压缩视频资源,然后上传。我试图将数据分成小包,但服务器不支持将这些小文件合并成一个;谢谢你一切,最好的祝愿 – traximus 2013-03-26 10:27:08