【问题标题】:Using Amazon S3 SDK to backup and restore iPhone data使用 Amazon S3 SDK 备份和恢复 iPhone 数据
【发布时间】:2011-05-29 00:42:05
【问题描述】:

我有一个 Amazon S3 帐户并已下载 AWSiOSSDK 框架/SDK 包。该示例工作正常。我可以“列出存储桶”并上传示例数据。

我想使用 S3 备份用户数据,然后提供下载相同备份的机会,以便在需要时恢复数据。

我认为识别执行此操作的方法/类很容易,但我很挣扎。我浏览了文档,但它是压倒性的(对于这样一个“直截了当”的要求)。我也找不到任何在线教程。我尝试从 Amazon 的示例中删除相关的代码和框架,但在尝试了几个小时后停止了。

有人向我指出如何在 XCode 中使用 Amazon SDK 的教程(或提供示例代码)吗?这是我第一次尝试在 iPhone 上进行在线备份,如果这看起来过于简单,请见谅。

感谢您的帮助。

【问题讨论】:

    标签: iphone amazon-s3 backup restore


    【解决方案1】:

    下载:

    s3Client = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY];              
    S3GetObjectRequest *request = [[S3GetObjectRequest alloc] initWithKey:@"YOURKEY" withBucket:@"YOURBUCKET"];
    S3GetObjectResponse *response = [s3Client getObject:request];
    

    response.body 是一个带有下载的 NSData

    要上传,S3PutObjectRequest 的工作方式大致相同。您可以指定文件名或 NSData。

    s3Client = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY];              
    S3PutObjectRequest *request = [[S3PutObjectRequest alloc] initWithKey:@"YOURKEY" withBucket:@"YOURBUCKET"];
    request.data = ...
    S3PutObjectResponse *response = [s3Client putObject:request];
    

    【讨论】:

    • 谢谢大卫。真的很感激。
    【解决方案2】:

    谢谢大卫。非常感谢。不过有几个问题。我在 AWSiOSSDK.framework 中复制,但我认为我必须将它导入到标题中?当我添加 #import AWSiOSSDK/S3/AmazonS3Client.h 时,它似乎阻止了任何 NSLog 消息。很奇怪。不用说我的上传不起作用,但我似乎无法调试。代码如下:

    标题

    #import UIKit/UIKit.h
    #import AWSiOSSDK/S3/AmazonS3Client.h
    
    #define ACCESS_KEY                   @""
    #define SECRET_KEY                   @""
    
    @interface S3_Try2ViewController : UIViewController {
    
    AmazonS3Client *s3Client;
    
    S3PutObjectRequest *putObjectRequest;
    S3PutObjectResponse *putObjectResponse;
    
    S3GetObjectRequest *getObjectRequest;
    S3GetObjectResponse *getObjectResponse;
    
    }
    
    -(IBAction) S3Upload;
    -(IBAction) S3Download;
    
    
     @end
    

    主要

    NSLog(@"Start upload");
    
    NSString *bucketName = @"bucketName";
    NSString *keyName    = @"asyncTestFile";
    NSString *filename   = [[NSBundle mainBundle] pathForResource:@"temp" ofType:@"txt"];
    
    NSLog(@"filename %@",filename);
    
    s3Client = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY];
    putObjectRequest = [[S3PutObjectRequest alloc] initWithKey:keyName inBucket:bucketName];
    
    NSLog(@"alloc finished");
    
    putObjectRequest.filename = filename;
    
    NSLog(@"Uploading");
    
    putObjectResponse = [s3Client putObject:putObjectRequest];
    
    NSLog(@"Finished?");
    

    【讨论】:

    • 除了在 ViewController 中导入标头之外,您是否将框架链接到您的项目中? AWS 库不会为我禁用 NSLog。 ACCESS_KEY 和 SCRET_KEY 是否也给出了正确的值?此外,请尝试使用此方法代替 putObjectRequest.filename,以确保文件名没有问题:putObjectRequest.data = [@"Sample uplodad text." dataUsingEncoding:NSASCIIStringEncoding];
    • 好奇者和好奇者。我已经在框架中链接了,所以这不是问题。我登录亚马逊,S3 存储桶中有我的测试文件!麻烦的是,我仍然没有得到任何 NSLog 输出!所以它可以工作,但以某种方式禁用控制台的 NSLog 消息。嗯。感谢您的所有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2018-07-21
    相关资源
    最近更新 更多