前一段时间我正在使用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分钟,但他们会一直盯着屏幕,希望整个时间。
答案 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);
}
将为其上传的每个数据包或其他内容调用它。请务必设置代表。
(不确定你是否需要设置两个代表)