我已经看到很多关于 SO 回答这个问题的问题,但是由于文件没有下载,我无法正确执行。
一些背景是我在 s3 中有一组 10 个文件。我可以通过 S3ListObjectsResult 看到它们。然后我将该结果存储在过滤的 NSMutableArray s3Result 中。这一切都很好。
后来,我真的想下载文件,所以我尝试这样做:
在 .h 文件中:
@interface MainViewController : UIViewController <AmazonServiceRequestDelegate>
@property (nonatomic, strong) NSMutableArray *s3Objects;
@property (nonatomic, strong) NSMutableArray *s3Results;
在 .m 文件中:
AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:key withSecretKey:secret];
for (NSString *result in s3Results) {
S3GetObjectRequest *s3Request = [[S3GetObjectRequest alloc] initWithKey:s3Result withBucket:bucket];
s3Request.delegate = self;
S3GetObjectResponse *s3Response = [s3 getObject:s3Request];
[s3Objects addObject:[[NSData alloc] initWithData:s3Response.body]];
这编译得很好并且运行正常,但是“下载”文件太快而无法实际工作,实际上 self.s3Objects 返回计数为 0。
- 有没有办法在 S3 方面看到调试?
- 我在获取文件方面做错了什么?
- 是否有可能是因为我是在 XCode 模拟器中执行此操作的?
编辑:好的,所以我添加了 AWS 需要的一些方法,即 didCompleteWithResponse、didReceiveData、didFailWithError 和 didFailWithServiceException。
结果是现在正在下载文件(我可以打印出 response.body 并查看数据),但它们没有被添加到 s3Objects:
-(void)request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response
{
[self.s3Objects addObject:[[NSData alloc] initWithData:response.body]];
}
即使在此之后,self.s3Objects 的计数也始终返回 0。