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

时间:2016-11-22 18:57:22

标签: ios upload icloud phasset

我想将PHAsset上传到服务器。现在我的PHAsset可以是照片或视频。我能够成功地为本地设备上的PHAsset做到这一点。但是,如果PHAsset不在本地设备上而是出现在iCloud上,那该怎么办呢。

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

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

更新:当我们允许网络访问从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;

}

1 个答案:

答案 0 :(得分:2)

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

如果您使用PHCachingImageManager& requestImageForAsset,您应为networkAccessAllowed指定特殊选项PHImageRequestOptions,允许iCloud按documentation中所述获取数据:

  

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

     
    

注意:您应该使用iCloud Documents服务启用iCloud权利并设置默认容器。在此处查看更多详细信息Enabling CloudKit in Your App。我可以看到,当您使用networkAccessAllowed = true

时,它是必需的   

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

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之前获取文档选择器中的数据,您可以在其中处理所请求的资产。