Получите PHAsset из ReferenceURL: fetchAssets(withALAssetURLs:options:) УСТАРЕЛО

Моя цель — загружать видеофайлы, снятые с устройства в исходном разрешении, на S3 с помощью AWSS3TransferUtility.

Пользователь выбирает видео, используя UIImagePickerController, однако, если я передаю info[UIImagePickerControllerMEDIAURL] в TransferUtility, он всегда уменьшает видео до 720p. Если я передаю утилиту переноса info[UIImagePickerControllerREFERENCEURL], я получаю сообщение об ошибке:

Операция не может быть завершена. (com.amazonaws.AWSS3TransferUtilityErrorDomain ошибка 4.)

Не могу найти объяснение кода ошибки, поэтому я предполагаю, что это ошибка разрешений, потому что я не получаю доступ к ресурсу через структуру Фото или PHAsset.fetch

  • СПРАВОЧНЫЙ URL-адрес - assets-library://asset/asset.mov?id=5B99DC8E-B94E-4CBF-AFB8-7F82BC72FEE2&ext=mov

  • URL-адрес МЕДИА — файл:///private/var/mobile/Containers/Data/Application/76928AD7-F142-4CC9-9708-A58C8CAF8EE5/tmp/trim.82038B6A-222F-4B50-A937-A8C399B02A08.MOV

Теперь у меня есть ReferenceURL, и я пытаюсь получить PHAsset, чтобы скопировать его в Documents Directory и передать оттуда URL-адрес в TransferUtility, чтобы обойти ошибку AWSS3TransferUtilityErrorDomain 4.

Однако fetchAssets(withALAssetURLs:options:) устарел, поэтому я не могу получить ресурс с помощью ReferenceURL; все остальные методы — это пакетная выборка через тип носителя и т. д. options:) но я не уверен, как получить локальный идентификатор PHAsset только из URL-адреса.


person T Rogers    schedule 22.11.2017    source источник


Ответы (1)


Если вам нужно PHAsset выбранного элемента, вы можете получить его непосредственно из info в обратном вызове UIImagePickerController

let asset = info[.phAsset] as? PHAsset

если его нет, то вы не запрашивали авторизацию до использования пикера, поэтому сделайте так

let status = PHPhotoLibrary.authorizationStatus()

if status == .notDetermined  {
    PHPhotoLibrary.requestAuthorization({status in

    })
}

Примечание. localIdentifier — это свойство PHObject, а PHAsset — подкласс PHObject.

person Asperi    schedule 24.04.2020