OSS上A文件夹下面有B、C、D文件,在IOS上用代码,想获取A文件夹下的列表。
在IOS上,使用下面代码
getBucket.prefix = @"IOS/";
getBucket.delimiter = @"/";
OSSTask * getBucketTask = [client getBucket:getBucket];
只能获取到 A/
而java的SDK,使用下面代码就可以获得B/ C/ D/
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
listObjectsRequest.setDelimiter("/");
listObjectsRequest.setPrefix("IOS/");
求指导问题在哪?或者我该怎么在IOS上实现
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的需求和提供的信息,您希望在iOS上使用OSS SDK获取OSS存储空间中特定前缀(如"A/")目录下的所有子目录(B/、C/、D/)列表。从参考资料看,问题可能出在您对getBucket
的使用方式上,因为直接调用getBucket
方法并设置prefix
和delimiter
属性的方式并不符合iOS SDK的标准操作模式。正确的做法应该类似于文档【1】中提到的ListObjects
请求参数配置。
在iOS上,您应该使用listObjectsV2
方法来实现这一需求,该方法允许您通过指定prefix
和delimiter
来获取具有特定前缀的对象列表及公共前缀(即子目录)。以下是调整后的示例代码:
// 初始化OSSClient,请确保已正确配置endpoint、accessKeyId、accessKeySecret等信息
// OSS *client = [[OSS alloc] initWithEndpoint:@"yourEndpoint" accessKeyId:@"yourAccessKeyId" accessKeySecret:@"yourAccessKeySecret" securityToken:nil];
OSSListObjectsRequest *listRequest = [OSSListObjectsRequest new];
listRequest.bucketName = @"yourBucketName"; // 填写您的Bucket名称
listRequest.prefix = @"A/"; // 设置前缀为"A/"
listRequest.delimiter = @"/"; // 使用正斜线作为分隔符以列出目录
OSSTask *listTask = [client listObjectsV2:listRequest];
[listTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSArray<OSSObjectSummary *> *objectSummaries = task.result.objectSummaries;
NSLog(@"Objects: %@", objectSummaries);
NSArray<NSString *> *commonPrefixes = task.result.commonPrefixes;
NSLog(@"Common Prefixes (directories): %@", commonPrefixes); // 这里将列出类似B/、C/、D/的子目录
} else {
NSLog(@"Failed to list objects, error: %@", task.error);
}
return nil;
}];
这段代码首先创建了一个OSSListObjectsRequest
对象,并设置了bucketName
、prefix
和delimiter
属性。然后,通过调用client listObjectsV2:
方法发起请求,并通过异步任务处理结果。其中,commonPrefixes
数组将包含您所查询的目录下的所有子目录名。
请替换上述代码中的yourEndpoint
、yourAccessKeyId
、yourAccessKeySecret
以及yourBucketName
为实际的值。这样,您就可以在iOS上正确地获取到"A/"文件夹下的B/、C/、D/等子目录列表了。