作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在我的应用程序中使用 GoogleDrive API 从我的应用程序上传文件。到目前为止,我成功并找到了上传所有类型文件的良好结果。
我关注了Google example上传文件。
我试图在上传时根据文件大小显示进度。我在 google 给出的示例代码中学习了很多类(class),但没有太多结果。
获取文件上传进度的步骤:
我在 GTLServices.m 中找到了以下方法
- (void)setUploadProgressBlock:(GTLServiceUploadProgressBlock)block {
[uploadProgressBlock_ autorelease];
uploadProgressBlock_ = [block copy];
if (uploadProgressBlock_) {
// As above, we need the fetcher to call us back when bytes are sent.
SEL sentDataSel = @selector(objectFetcher:didSendBytes:totalBytesSent:totalBytesExpectedToSend:);
[[self objectFetcher] setSentDataSelector:sentDataSel];
}
}
之后在MyViewController.m中这样写
[self.driveService setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength) {
NSLog(@"uploading");
}];
NSLog 永远不会因为这个而被原谅,我无法获得上传的数据字节。通过调试,我发现 uploadProgressBlock_ 总是显示 nil。可能是因为我的 block 处理程序没有被执行。
如果我在解决问题时有任何错误,请建议我。如果有人知道将文件的数据字节上传到谷歌驱动器,请建议我。您的建议对我的工作更有用。
提前致谢。
采纳我们的建议的综合答案:
这里是获取上传进度信息的代码
GTLServiceTicket *uploadTicket= [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,GTLDriveFile *updatedFile,NSError *error)
{
if (error == nil)
{
[self.delegate completedFileUploadingToGoogleDrive];
NSError *fileDeletionError=nil;
[[NSFileManager defaultManager] removeItemAtPath:absalutePath error:&fileDeletionError];
} else
{
[self.delegate errorOccoredWhileUploadingToGoogleDrive:error];
}
}];
[uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) {
[self.delegate uploadedFileInfoInKB:(float)totalBytesExpectedToWrite/1024 and:(float)totalBytesWritten/1024];
}];
编码愉快!!
最佳答案
我已成功使用上传 block 回调...将其分配给您从 executeQuery
方法获得的 GTLServiceTicket
对象。
示例:
GTLServiceTicket *uploadTicket = [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *insertedFile, NSError *error)
{ // completion
}];
[uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite)
{
// progress
}
关于iphone - 永远不会在 ios 的 google API 中获得上传数据进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15267191/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!