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