从ReferenceURL获取PHAsset:fetchAssets(withALAssetURLs:options :)已弃用

T R*_*ers 9 uiimagepickercontroller swift phasset

我的目标是使用AWSS3TransferUtility将原始分辨率的设备捕获的视频文件上传到S3。

用户使用来选择视频,UIImagePickerController但是,如果我传递info[UIImagePickerControllerMEDIAURL]给transferUtility,它将始终将视频降低到720p。如果我通过transferutility,info[UIImagePickerControllerREFERENCEURL]则会收到错误消息:

该操作无法完成。(com.amazonaws.AWSS3TransferUtilityErrorDomain错误4。)

找不到错误代码的说明,因此我假设这是权限错误,因为我没有通过Photos框架或PHAsset.fetch

  • REFURLCE URL-assets-library://asset/asset.mov?id = 5B99DC8E-B94E-4CBF-AFB8-7F82BC72FEE2&ext = mov

  • 媒体URL-file:///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来获取资产;所有其他方法都是通过媒体类型等批量获取。有fetchAssets(withLocalIdentifiers:options :),但我不确定如何仅从URL获取PHAsset的本地标识符。

Asp*_*eri 1

如果需要PHAsset选择的项目,可以直接从回调info中获取UIImagePickerController

let asset = info[.phAsset] as? PHAsset
Run Code Online (Sandbox Code Playgroud)

如果不存在,那么您在使用选择器之前没有请求授权,因此请执行以下操作

let status = PHPhotoLibrary.authorizationStatus()

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

    })
}
Run Code Online (Sandbox Code Playgroud)

注意:localIdentifier是 的属性PHObject,并且PHAsset是 的子类PHObject