QLPreviewController
Dropbox に保存されているファイルをプレビューするために使用したいと考えています。QLPreviewController
は NSURL を受け取りますが、Dropboxはまたはのファイル コンテンツDBFile
のみを返します。NSFileHandle *
NSData *
NSString *
で Dropbox をプレビューする適切な方法は何DBFile
ですかQLPreviewController
?
QLPreviewController
Dropbox に保存されているファイルをプレビューするために使用したいと考えています。QLPreviewController
は NSURL を受け取りますが、Dropboxはまたはのファイル コンテンツDBFile
のみを返します。NSFileHandle *
NSData *
NSString *
で Dropbox をプレビューする適切な方法は何DBFile
ですかQLPreviewController
?
ドロップボックス同期 API を使用しています。
これは、ドロップボックス ファイルを一時ディレクトリにコピーして、DBFileInfo アイテムを NSURL に「変換」するスニペットです。
この方法:
[[DBFilesystem sharedFilesystem] listFolder:[DBPath root] error:&err];
)スニペットは完全ではありませんが、そのまま使用できます。ただし、プログレス スピナー付きの HUD などの一部のユーザー情報を使用する必要があります (ファイルのダウンロードには時間がかかる場合があります)。
- (NSURL*)urlOfDropboxItemAtIndex:(NSUInteger)index {
if(index < self.files.count) {
//[self presentProcessingFileHUD];
__block NSURL *fileURL;
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSError *err;
DBFileInfo *fileInfo = self.files[index];
NSString *tempDir = NSTemporaryDirectory();
NSURL *tempURL = [NSURL fileURLWithPath:[tempDir stringByAppendingPathComponent:@"dropbox-tmp"]];
// create tempURL
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:tempURL.path]) {
[fileManager createDirectoryAtURL:tempURL withIntermediateDirectories:YES attributes:nil error:&err];
if(err) {
NSString *errMsg = [NSString stringWithFormat:@"Error creating temp directory at %@", tempURL.path];
NSLog(@"%@",errMsg);
[self presentErrorHUDWithMessage:errMsg];
}
}
fileURL = [tempURL URLByAppendingPathComponent:fileInfo.path.name];
// read dropbox file
DBFile *file = [[DBFilesystem sharedFilesystem] openFile:fileInfo.path error:&err];
if(file && !err) {
NSData *fileData = [file readData:&err];
if(err) { NSLog(@"Error reading data from file %@ (%@)", fileURL.path, err); }
[fileData writeToURL:fileURL atomically:YES];
[file close];
//[self dismissHUD];
} else {
NSString *errStr = [NSString stringWithFormat:@"Error accessing Dropbox file %@ (%@)", fileURL.path, err];
NSLog(@"%@", errStr);
//[self presentErrorHUDWithMessage:errStr];
fileURL = nil;
}
});
return fileURL;
} else {
return nil;
}
}
QLPreviewController
を取ることがNSURL
できますが、ファイルの URL である必要があります。そのため、ファイルの内容をダウンロードしてディスクに保存する必要があります (必要なファイル データを取得する任意の方法を使用します)。