【问题标题】:Get a PHAsset from ReferenceURL: fetchAssets(withALAssetURLs:options:) DEPRECATED从 ReferenceURL 获取 PHAsset: fetchAssets(withALAssetURLs:options:) 已弃用
【发布时间】:2018-05-06 06:56:48
【问题描述】:

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

用户使用UIImagePickerController 选择视频,但是,如果我将info[UIImagePickerControllerMEDIAURL] 传递给transferUtility,它总是将视频降低到720p。如果我通过 transferutility info[UIImagePickerControllerREFERENCEURL] 我得到一个错误:

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

找不到错误代码的解释,所以我假设它是 permissions 错误,因为我没有通过 Photos 框架或 PHAsset.fetch

  • 参考网址 - assets-library://asset/asset.mov?id=5B99DC8E-B94E-4CBF-AFB8-7F82BC72FEE2&ext=mov

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

【问题讨论】:

    标签: swift uiimagepickercontroller phasset


    【解决方案1】:

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

    let asset = info[.phAsset] as? PHAsset
    

    如果它不存在,那么您没有在之前使用选择器请求授权,所以这样做

    let status = PHPhotoLibrary.authorizationStatus()
    
    if status == .notDetermined  {
        PHPhotoLibrary.requestAuthorization({status in
    
        })
    }
    

    注意:localIdentifierPHObject 的属性,PHAssetPHObject 的子类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2015-12-17
      • 2011-11-07
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      相关资源
      最近更新 更多