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];. 这将占用主线程直到它完成,除非我在另一个线程上运行它。无论哪种方式,我都不知道让我的用户知道上传已经走了多远。真的没有办法做到这一点吗?我读到 S3 服务的某些浏览器 API 版本必须使用 Flash,或者将所有上传设置为通过另一台服务器,并在该服务器上跟踪,但我不会这样做。任何人?谢谢。

我的用户应该上传大小不超过 15mb 的视频,我是否必须让他们盯着旋转的轮子看一段未知的时间?如果连接不好,他们可能需要等待 15 分钟,但他们会一直盯着屏幕充满希望。

4

1 回答 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);
}

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

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

于 2013-08-21T00:14:37.790 回答