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

3

我曾经使用过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的文件,所以我选择转向云端区域进行探索。我现在一直在测试Amazon的S3服务,但是我唯一找到上传数据的方法是通过调用[s3 putObject:request];。这将占用主线程直到完成,除非我在另一个线程上运行它。无论哪种方式,我都不知道如何让我的用户知道上传进度。难道真的没有办法吗?我读到一些浏览器API版本的S3服务必须使用Flash,或者设置所有上传通过另一个服务器进行,并在该服务器上跟踪,但我不会做任何一种。有人知道怎么做吗?谢谢。

我的用户应该上传大小达到15MB的视频,我必须让他们盯着旋转的轮子等待未知的时间吗?在网络差的情况下,他们可能需要等待15分钟,但他们会一直看着屏幕希望上传成功。

1个回答

8
似乎我在首次发帖时没有好好做功课。我找到了一个很棒的教程,它完全满足了我的要求。这是链接。如果我的问题能够帮助像我一样无助的人,那么我就不删除这个问题了。
基本上,它有一个委托方法来实现这个功能。可以像这样做:
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);
}

它将在上传每个数据包时被调用。确保设置委托。

(不确定是否需要设置两个委托)


我遇到了同样的问题。你如何配置Parse将文件存储到S3?通常我们会使用PFFile将其发送到mLab,我们是否应该安装Amazon iOS SDK并直接保存到S3,并在我们的数据库中创建一个URL字段来引用S3中的文件,如果需要,通过URL获取它? - Kesong Xie
@KesongXie 哦,当我转到亚马逊时,我完全放弃了Parse,所以我不知道。 - Sti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接