PhotoLibraryからサーバーに大きなビデオアセットをアップロードする際に問題が発生しました。
ここで説明するようにアセットデータを取得し、ビデオをローカルドキュメントにエクスポートしてから、アップロードします。
しかし、大きなビデオ(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:
OR setHTTPBodyStream:
でクラッシュする
ので、メモリリークか何かについてだと思います。
================
EDIT2:今、私はビデオを圧縮することにしました、私は現在の方法でビデオデータを取得しますが大きすぎます(300mb以上)、しかし私UIImagePickerController
は同じビデオを選択するのに使用します、それはちょうど30mbです;だから圧縮は助けです; 試してみUIVideoEditorController
て、すぐに結果を投稿します。