Загрузка файлов из Kinvey в iOS

Я прочитал документы по кинвей здесь: http://devcenter.kinvey.com/ios/guides/files#DownloadingtoCachesDirectory

Они также предоставили образец функции:

[KCSFileStore downloadData:@"myId" completionBlock:^(NSArray *downloadedResources, NSError *error) {
if (error == nil) {
    KCSFile* file = downloadedResources[0];
    NSData* fileData = file.data;
    id outputObject = nil;
    if ([file.mimeType hasPrefix:@"text"]) {
        outputObject = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
    } else if ([file.mimeType hasPrefix:@"image"]) {
        outputObject = [UIImage imageWithData:fileData];
    }
    NSLog(@"downloaded: %@", outputObject);
} else {
    NSLog(@"Got an error: %@", error);
 }
} progressBlock:nil]; 

Но когда я заменил «myId» на идентификатор файла, это дало мне эту ошибку:

Error Domain=KCSServerErrorDomain Code=401 "The credentials used to authenticate this request are not authorized to run this operation. Please retry your request with appropriate credentials"

Хотя я могу получить доступ к другим коллекциям, которые я создал через kinvey (тот же пользователь) с теми же учетными данными (secret,api_key)

Есть ли какие-либо другие требования перед вызовом этой функции?

Спасибо


person iAhmed    schedule 25.03.2016    source источник


Ответы (2)


У меня такая же проблема. Я связался и получил помощь от службы поддержки kinvey.

Я решил проблему, установив «acl» для каждого файла, который я загружаю. Согласно руководству по файлам iOS в параметрах загрузки: "По умолчанию файл будет доступен только создавшему его пользователю.", именно это вызывало у меня проблему.

Я загружаю файлы, как это сейчас:

    let metadata = KCSMetadata()
    metadata.setGloballyReadable(true)

    let data = UIImagePNGRepresentation(image)

    KCSFileStore.uploadData(
        data,
        options: options: [KCSFileACL : metadata],
        completionBlock: {KCSFileUploadCompletionBlock!},
        progressBlock: nil)

Это позволяет любому пользователю читать этот конкретный файл. Я использую KCSUser.createAutogeneratedUser() для последующего чтения файлов.

Да, у вас будет доступ к другим коллекциям в том же приложении kinvey, но необходимо установить разрешения для коллекции файлов. Таким образом, файл, который вы описываете как "myId", должен иметь соответствующие разрешения, прежде чем его сможет загрузить другой пользователь, кроме пользователя, который загрузил файл.

person Wiingaard    schedule 12.08.2016

Вы должны быть активным пользователем для вызова этой функции. Вам просто нужно убедиться, что вы успешно вошли в систему.

person Pranav Jadhav    schedule 26.03.2016
comment
Да, ты прав. Для загрузки нужно быть активным пользователем, и я тоже, но я оказался в этом сообщении об ошибке. - person iAhmed; 28.03.2016