2016-07-14 4 views
0

PHAssetをアップロードしたいが、私は資産のファイルパスを持っていない。以下のブロックメソッドを使用してファイルをアップロードできます。しかし、これはURLを取得するための非同期メソッドです。 PHAssetファイルをアップロードするための同期方法がありますか。PHAssetをアップロードするには(ビデオと画像のみ)?

画像アセットURL:

[asset requestContentEditingInputWithOptions:editOptions 
           completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { 
     NSURL *imageURL = contentEditingInput.fullSizeImageURL; 
    }]; 

動画ファイルのURL:

[[PHImageManager defaultManager]requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { 

        NSURL *url = (NSURL *)[[(AVURLAsset *)asset URL] fileReferenceURL]; 




       }]; 
+0

これらの非同期メソッドに対処する必要があります。また、URLがnilのファイルについても考慮してください。そのようなファイルはローカルデバイスにはなく、代わりにiCloudに存在します。 –

答えて

1

私はPHAssetからの映像を取得し、それをサーバーにアップロードするローカルファイルパスにそれを格納しています:ここで次のコードであります:

let fetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate",ascending:false)] 
assets = PHAsset.fetchAssets(with:fetchOptions) 

let resourceManager = PHAssetResourceManager.default() 
let resource = PHAssetResource.assetResources(for: asset).first! 
let name = resource.originalFilename 
let videoLocalPath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name) 

//Storing the resource to local temporary path  
resourceManager.writeData(for: resource, toFile: videoLocalPath, options: nil, completionHandler: {error in 
     if error != nil{ 
//  on success do the upload using the local file path 
     } 
    }) 

希望します。

関連する問題