1

QLPreviewControllerDropbox に保存されているファイルをプレビューするために使用したいと考えています。QLPreviewControllerは NSURL を受け取りますが、Dropboxはまたはのファイル コンテンツDBFileのみを返します。NSFileHandle *NSData *NSString *

で Dropbox をプレビューする適切な方法は何DBFileですかQLPreviewController?

4

2 に答える 2

1

ドロップボックス同期 API を使用しています。

これは、ドロップボックス ファイルを一時ディレクトリにコピーして、DBFileInfo アイテムを NSURL に「変換」するスニペットです。

この方法:

  • DBFileInfo 項目を含むself.file NSArrayがあることを前提としています (参照: [[DBFilesystem sharedFilesystem] listFolder:[DBPath root] error:&err];)
  • 情報アイテムを開いて NSData として読み取ります
  • 同じファイル名で tempURL に書き込みます
  • tempURL を返します

スニペットは完全ではありませんが、そのまま使用できます。ただし、プログレス スピナー付きの 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;
    }
}
于 2013-10-17T23:49:59.250 に答える
0

QLPreviewControllerを取ることがNSURLできますが、ファイルの URL である必要があります。そのため、ファイルの内容をダウンロードしてディスクに保存する必要があります (必要なファイル データを取得する任意の方法を使用します)。

于 2013-08-16T09:16:15.900 に答える