gpt4 book ai didi

ios - 如何使用带有 NSURLSessionDownloadTask 的 restclient dropbox API 下载文件

转载 作者:行者123 更新时间:2023-11-29 12:56:51 31 4
gpt4 key购买 nike

问题:我想从我的保管箱帐户下载一个文件并使用快速查看来可视化它。

第一个解决方案:

1) 使用 Dropbox API restClient:

[[self restClient] loadFile:fullpath intoPath:finalpath];

2) 下载后使用 QLPreviewController 预览文件。

此解决方案的问题是我不知道如何将下载与预览同步(要使用快速查看文件需要在本地,所以我需要先下载它)。

我想出的(丑陋的)解决方法是设置一个警报(“缓存”)并使其持续任意长度的时间(比如 12 秒,魔数(Magic Number)...)。同时我暂停执行 10-12 秒(魔数(Magic Number)):

[NSThread sleepForTimeInterval:12.0f];

...并希望在此时间间隔结束时文件已下载,以便我可以启动 QLPreviewController。

这是代码(丑陋的,我知道......):

// Define Alert
UIAlertView *downloadAlert = [[UIAlertView alloc] initWithTitle:@"caching" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil] ;

// If file does not exist alert downloading is ongoing
if(![[NSFileManager defaultManager] fileExistsAtPath:finalpath])
{
// Alert Popup
[downloadAlert show];
//[self performSelector:@selector(isExecuting) withObject:downloadAlert afterDelay:12];

}

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Here your non-main thread.
if(![[NSFileManager defaultManager] fileExistsAtPath:finalpath])
{
[NSThread sleepForTimeInterval:12.0f];
}

dispatch_async(dispatch_get_main_queue(), ^{

// Dismiss alert
[downloadAlert dismissWithClickedButtonIndex: -1 animated:YES];

//Here we return to main thread.
// We use the QuickLook APIs directly to preview the document -
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.dataSource = self;
previewController.delegate = self;
// Push new viewcontroller, previewing the document
[[self navigationController] pushViewController:previewController animated:YES];

});
});

它确实有效(小文件和快速连接)但它不是最好的解决方案...。

我认为最好的解决方案是将 NSURLSession 与 dropbox restClient 集成,以便使用此例程:

NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration
delegate:nil
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDownloadTask *task;
task = [session downloadTaskWithRequest:request
completionHandler:^(NSURL *localfile, NSURLResponse *response, NSErr or *error) {
/* yes, can do UI things directly because this is called on the main queue */ }];
[task resume];

但我不确定如何将它与 DropBox API 一起使用:有什么建议吗?

谢谢, 域名

最佳答案

看起来 API 会告诉您进度和完成情况:

- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath contentType:(NSString*)contentType metadata:(DBMetadata*)metadata;
- (void)restClient:(DBRestClient*)client loadProgress:(CGFloat)progress forFile:(NSString*)destPath;

无需直接进行任何休眠或 gcd 调用。只需将您的 UI 更改为在下载开始时显示忙碌,并使用这些更新 UI 以显示进度和完成情况。

关于ios - 如何使用带有 NSURLSessionDownloadTask 的 restclient dropbox API 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862618/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com