【问题标题】:Upload PHAsset from iCloud (i.e. which is not present on the local device )从 iCloud 上传 PHAsset(即本地设备上不存在)
【发布时间】:2016-11-22 18:57:22
【问题描述】:

我想将 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;

}

【问题讨论】:

    标签: ios upload icloud phasset


    【解决方案1】:

    您应该在移动应用中下载资产,然后上传到您的服务器。由于沙盒和其他隐私和安全规则,我认为无法直接从 iCloud 上传。

    如果您使用PHCachingImageManagerrequestImageForAsset,您应该为PHImageRequestOptions 指定特殊选项networkAccessAllowed,它允许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 来处理请求的资产。

    【讨论】:

    • 您对先下载资产然后上传到服务器的想法非常有帮助。我试图获取这样的图像,但出现错误“获取资产失败”。查看更新后的问题。
    • 是否因为应用无法访问 iCloud 而导致资产请求失败?我还没有注册 Apple 开发者计划。
    • 是的。您应该使用 iCloud Documents 服务启用 iCloud 授权并设置默认容器。在此处查看更多详细信息Enabling CloudKit in Your App。如我所见,当您使用networkAccessAllowed = true 时,它是必需的。
    • 谢谢,我已经有了。但要使用 iCloud,我想我需要注册并支付 Apple 开发者计划的费用。
    猜你喜欢
    • 2016-05-07
    • 2014-01-13
    • 2014-05-02
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多