在 iOS 中从 Kinvey 下载文件
Downloading Files from Kinvey in iOS
我在这里阅读了 kinvey 上的文档:
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];
但是当我用文件 ID 替换 "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"
虽然我可以使用相同的凭据(秘密,api_key)访问我在 kinvey(同一用户)上创建的其他集合
调用此函数还有其他要求吗?
谢谢
您必须是活跃用户才能调用此功能。您只需要确保您已成功登录。
我遇到了同样的问题。我联系了 kinvey 支持团队 got help。
我通过为上传的每个文件设置 "acl" 解决了这个问题。根据 iOS Files guide under upload options:“默认情况下,该文件仅供创建用户使用。”,这就是导致我出现问题的原因。
我现在上传这样的文件:
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"
的文件需要设置适当的权限,才能由上传文件的用户以外的其他用户下载。
我在这里阅读了 kinvey 上的文档: 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];
但是当我用文件 ID 替换 "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"
虽然我可以使用相同的凭据(秘密,api_key)访问我在 kinvey(同一用户)上创建的其他集合
调用此函数还有其他要求吗?
谢谢
您必须是活跃用户才能调用此功能。您只需要确保您已成功登录。
我遇到了同样的问题。我联系了 kinvey 支持团队 got help。
我通过为上传的每个文件设置 "acl" 解决了这个问题。根据 iOS Files guide under upload options:“默认情况下,该文件仅供创建用户使用。”,这就是导致我出现问题的原因。
我现在上传这样的文件:
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"
的文件需要设置适当的权限,才能由上传文件的用户以外的其他用户下载。