文件上传到Amazon S3 for iOS的进度条?

时间:2013-08-20 23:30:00

标签: ios file-upload amazon-s3 progress

前一段时间我正在使用Parse提供的服务,他们实现了上传数据的惊人功能,方法如下:

PFFile *objectToSave...; //An image or whatever, wrapped in a Parse-file
[objectToSave saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        //Do stuff after upload is complete
    } progressBlock:^(int percentDone) {
        [someLabel setText:[NSString stringWithFormat:@"%i%@", percentDone, @"%"]];
    }];

让我跟踪文件上传。由于Parse只允许我上传最大10mb文件,所以我选择移动到云区来探索一下。我现在一直在使用亚马逊的S3服务进行测试,但我能找到如何上传数据的唯一方法是致电[s3 putObject:request];。这将占用主线程,直到它完成,除非我在另一个线程上运行它。无论哪种方式,我都不知道让我的用户知道上传的程度。真的没有办法做到这一点吗?我读到S3的服务的某些浏览器API版本必须使用Flash,或者将所有上传设置为通过另一台服务器,并在该服务器上跟踪,但我不会做其中任何一项。任何人?感谢。

我的用户应该上传大小不超过15mb的视频,我是否必须让他们在未知的时间内盯着旋转的轮子?由于连接不良,他们可能需要等待15分钟,但他们会一直盯着屏幕,希望整个时间。

1 个答案:

答案 0 :(得分:8)

似乎我在发布这个问题之前没有完成我的作业。我发现this great tutorial完全符合我的要求。我会删除我的问题,但我会留下来,以防它可能会帮助像我这样的其他无助的人。

基本上,它有一个委托方法。做这样的事情:

S3PutObjectRequest *por = /* your request/file */;
S3TransferManager *tm = /* your transfer manager */;

por.delegate = self;
tm.delegate = self;

[tm upload: por];

然后使用这个适当命名的委托方法:

-(void)request:(AmazonServiceRequest *)request 
    didSendData:(long long)bytesWritten 
    totalBytesWritten:(long long)totalBytesWritten 
    totalBytesExpectedToWrite:(long long)totalBytesExpectedToWrite
{
    CGFloat progress = ((CGFloat)totalBytesWritten/(CGFloat)totalBytesExpectedToWrite);
}

将为其上传的每个数据包或其他内容调用它。请务必设置代表。

(不确定你是否需要设置两个代表)