如何使用ios从s3下载一组文件?

时间:2013-02-06 02:09:41

标签: ios ios4 amazon-s3 ios-simulator download

我已经看到很多关于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.

  1. 有没有办法在S3方面看到调试?
  2. 关于获取文件我做错了什么?
  3. 是否有可能是因为我在XCode模拟器中执行此操作?
  4. 编辑: 好的,所以我添加了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。

1 个答案:

答案 0 :(得分:1)

我得到了这个工作。原始问题的答案是实现缺少的AWS方法。第二个问题的答案是我错过了初始化s3Objects数组。这样做之后,效果很好。