我的目标是使用AWSS3TransferUtility将原始分辨率设备捕获的视频文件上传到S3。
用户选择一个视频,使用 UIImagePickerController
然而,如果我通过 info[UIImagePickerControllerMEDIAURL]
到transferUtility,它总是减少视频到720p。如果我通过transferutility info[UIImagePickerControllerREFERENCEURL]
我得到一个错误。
该操作无法完成。 (com.amazonaws.AWSS3TransferUtilityErrorDomain错误4。)
找不到对错误代码的解释,所以我认为这是一个 权限 错误,因为我没有通过 照片 架构或 PHAsset.fetch
参考网址 -assets-library:/assetasset.mov?id=5B99DC8E-B94E-4CBF-AFB8-7F82BC72FEE2&ext=mov。
媒体网址 -file:/privatevarmobileContainersDataApplication76928AD7-F142-4CC9-9708-A58C8CAF8EE5tmptrim.82038B6A-222F-4B50-A937-A8C399B02A08.MOV。
现在,我有了ReferenceURL,并试图获取PHAsset,以便将其复制到Documents目录,并从那里将它的URL传递给TransferUtility,以绕过 AWSS3TransferUtilityErrorDomain错误4。.
然而, fetchAssets(withALAssetURLs:options:)现在已经不适用了。 所以我无法通过ReferenceURL来获取资产,其他方法都是通过媒体类型等批量获取。有一个 fetchAssets(withLocalIdentifiers:options:) 但我不知道如何仅仅从URL中获取PHAsset的本地标识符,我的目标是使用AWSS3TransferUtility上传原始分辨率设备捕获的视频文件到S3。
如果你需要 PHAsset
所选项目的,您可以直接从 info
在 UIImagePickerController
回调
let asset = info[.phAsset] as? PHAsset
如果它不在那里,那么你就没有申请授权。之前 使用picker,所以这样做
let status = PHPhotoLibrary.authorizationStatus()
if status == .notDetermined {
PHPhotoLibrary.requestAuthorization({status in
})
}
注。localIdentifier
是一个属性 PHObject
和 PHAsset
的一个子类。PHObject
.