2016-11-22 3 views
0

Я хочу загрузить PHASset на сервер. Теперь мой PHASset может быть фото или видео. Я могу сделать это успешно для PHAssets, присутствующих на локальном устройстве. Но что, если PHAsset не находится на локальном устройстве и вместо этого присутствует в iCloud.Загрузить 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; 

} 

ответ

2

Вы должны загрузить актив в своем мобильном приложении, а затем загрузить его на свой сервер. Я не думаю, что можно загружать прямо из iCloud из-за правил для песочницы и других секретных правил безопасности &.

Если вы используете PHCachingImageManager & requestImageForAsset, следует указать специальный параметр networkAccessAllowed для PHImageRequestOptions которая позволяет ICloud для извлечения данных, как описано в documentation:

Если ДА, и запрошенные данные ресурса не хранится на локальное устройство, Photos загружает данные из iCloud.

ПРИМЕЧАНИЕ: Вы должны включить ICloud право с 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, где вы можете обрабатывать запрошенный актив.

+0

Ваши соображения по загрузке актива сначала, а затем загрузка на сервер очень полезны. Я попытался получить изображение, как это, но я получаю сообщение об ошибке «Извлечение активов». См. Обновленный вопрос. –

+0

Происходит ли запрос на актива, поскольку приложение не имеет доступа к iCloud? Я не участвовал в программе разработчика Apple. –

+0

Да. Вы должны включить право iCloud с помощью службы iCloud Documents и настроить контейнер по умолчанию. Подробнее см. Здесь [Включение CloudKit в вашем приложении] (https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CloudKitQuickStart/EnablingiCloudandConfiguringCloudKit/EnablingiCloudandConfiguringCloudKit.html). Как я вижу, это необходимо, если вы используете 'networkAccessAllowed = true'. – dive

Смежные вопросы