从iCloud上传PHAsset(即不在本地设备上)

我想上传一个PHAsset到服务器。 现在我的PHAsset可以是照片或video。 我能够成功地为本地设备上存在的PHAssets做到这一点。 但是,如果PHAsset不在本地设备上,而是出现在iCloud上。

我们可以直接从iCloud上传到服务器,还是必须先下载到本地设备,然后再上传到服务器。

另外,如果有人能告诉我如何做到这一点,我将不胜感激。


更新:当我们允许networking访问下载图像forms的iCloud我得到这个错误。

{ PHImageErrorKey = "Error Domain=CloudPhotoLibraryErrorDomain Code=1000 \"Error fetching asset with identifier: AUXxudUWWzHheX1dXyRDgXpZN5ty\" UserInfo={NSLocalizedDescription=Error fetching asset with identifier: AUXxudUWWzHheX1dXyRDgXpZN5ty, NSUnderlyingError=0x7fb00a5e9480 {Error Domain=CKErrorDomain Code=6 \"Fetching asset failed\" UserInfo={NSLocalizedDescription=Fetching asset failed, NSUnderlyingError=0x7fb00a511600 {Error Domain=CKInternalErrorDomain Code=2022 \"Fetching asset failed\" UserInfo={NSLocalizedDescription=Fetching asset failed, NSUnderlyingError=0x7fb00a5b6fc0 {Error Domain=com.apple.mmcs Code=16 \"(null)\"}}}}}}"; PHImageResultDeliveredImageFormatKey = 0; PHImageResultIsInCloudKey = 1; PHImageResultWantedImageFormatKey = 20002; } 

您应该在您的移动应用程序内下载资产,然后上传到您的服务器。 我不认为可以直接从iCloud上传,因为沙盒和其他隐私和安全规则。

如果您使用PHCachingImageManagerrequestImageForAsset ,则应该为PHImageRequestOptions指定特殊选项PHImageRequestOptions ,以允许iCloud按照文档中所述获取数据:

如果是,并且所请求的资源数据不存储在本地设备上,则照片将从iCloud下载该数据。

:您应该使用iCloud Documents服务和设置默认容器来启用iCloud授权。 在此处查看更多详细信息在应用程序中启用CloudKit 。 正如我所看到的,当您使用networkAccessAllowed = true时,它是必需的

例如,您可以为您的资产pipe理器设置选项,如下所示:

 PHImageRequestOptions *requestOptions = [PHImageRequestOptions new]; requestOptions.synchronous = NO; requestOptions.resizeMode = PHImageRequestOptionsResizeModeFast; requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; requestOptions.networkAccessAllowed = YES; 

然后请求数据

 [self.cachingImageManager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:requestOptions resultHandler:^(UIImage * _Nullable resultImage, NSDictionary * _Nullable info) { ... }]; 

在这种情况下,您将看到iCloud在文档选取器中如何获取数据,然后调用resultHandler来处理请求的资产。