2016-07-14 19 views
0

Ich möchte PHAsset hochladen, aber ich habe nicht den Dateipfad des Assets. Ich kann die Datei mit den folgenden Blockmethoden hochladen. Dies sind jedoch asynchrone Methoden zum Abrufen der URLs. Gibt es eine synchrone Methode, dies zu tun, oder eine andere Möglichkeit, die PHAsset-Dateien hochzuladen?Wie lade ich PHAsset (nur Video und Bild)?

Image-Asset URL:

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

Video-Datei 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

Wir müssen mit diesen asynchronen Methoden umgehen. Und berücksichtigen Sie auch für die Dateien, deren URL null ist. Solche Dateien sind nicht auf dem lokalen Gerät vorhanden und stattdessen auf der iCloud vorhanden. –

Antwort

1

ich ein Video von PHAsset bin holen und zu lokalem Dateipfad zu speichern sie auf dem Server zu laden: hier ist der folgende Code :

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 
     } 
    }) 

Hoffnung, die hilft.