2016-07-14 2 views
0

Я хочу загрузить PHAsset, но у меня нет пути к файлу актива. Я могу загрузить файл, используя приведенные ниже методы блоков. Но это асинхронные методы для получения URL-адресов. Есть ли какой-либо синхронный метод для этого или любой другой способ загрузки файлов PHAsset.Как загрузить PHAsset (только видео и изображение)?

Image Asset 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 которых равен нулю. Такие файлы отсутствуют на локальном устройстве и вместо этого присутствуют в 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 
     } 
    }) 

Надеюсь, что это поможет.

Смежные вопросы