2015-01-09 4 views
0

Итак, я довольно утерян с этим и действительно новым для файлов epub. Я немного потрудился, но, похоже, не могу все собрать в голове.ObjectiveC - Чтение файла ePub Gotten From Dropbox

Мое приложение использует DropShot Chooser API для получения файла из папки DropBox пользователя. В этом случае я хочу открыть файл .epub. Поэтому, когда пользователь выбирает файл, DropBox API возвращает мне объект NSURL для этого файла. Например:

https://dl.dropboxusercontent.com/1/view/e8bmxpkree6nc67/The%20Art%20of%20War.epub 

И теперь, я попробовал пару различных инструментов, чтобы попытаться прочитать этот файл. Первоначально я пробовал использовать KFEpubKit. Но когда я позвонил:

epubURL; // The url from DropBox (shown above) 
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
self.epubController = [[KFEpubController alloc] initWithEpubURL:epubURL andDestinationFolder:documentsURL]; 
self.epubController.delegate = self; 
[self.epubController openAsynchronous:YES] 

Я вернусь к ошибке, что файл не может быть распакован. Ошибка читается как:

Epub Error: Error Domain=KFEpubKitErrorDomain Code=1 "Could not extract epub file." UserInfo=0x170275400 {NSLocalizedDescription=Could not extract epub file.} 

Я просмотрел код и немного сузил проблему. KFEpubKit использует утилиту SSZipArchive для распаковки файлов. И с этого момента я немного застрял. Похоже, что вызов [SSZipArchive unzipFileAtPath: toDestination:] не работает при использовании с epubURL.path. Я не уверен, что это связано с тем, что мой файл является расширением .epub, а не расширением .zip. Или, может быть, есть некоторые вещи, которые нужно сделать после получения URL-адреса из DropBox и до того, как передать его в инструмент KFEpubKit?

В конце концов, я ожидаю, что вам придется отображать текст книги с помощью UIWebView. Но я просто не знаю, как обращаться с этим файлом .epub. Что мне делать с файлом из Dropbox? Буду признателен за любую оказанную помощь.

ответ

0

Быстрый взгляд указывает, что SSZipArchive хочет URL-адрес локального файла, а не удаленный URL-адрес HTTP. Попробуйте загрузить файл первым (NSData с содержимым URL, а затем записать в какой-то временный файл), а затем создать файл URL, который указывает на временный файл, и отправить его в KFEpubController:

// Download the file from dropbox 
epubURL; // The url from DropBox (shown above) 
NSData * epubData = [NSData dataWithContentsOfURL:epubURL]; 
NSString * tempPath = [NSTemporaryDirectory() stringByAddingPathComponent:@"temp.epub"]; 
[epubData writeToFile:tempPath atomically:YES]; 

NSURL *tempURL = [NSURL URLWithString:tempPath]; 
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
self.epubController = [[KFEpubController alloc] initWithEpubURL:tempURL andDestinationFolder:documentsURL]; 
// etc. 

(кодирование из памяти.) Все нормальные оговорки применяются здесь - вы захотите сделать правильную обработку ошибок/ошибок при загрузке, избавиться от временного файла и т. Д. И т. Д.

+1

Работал отлично! –

 Смежные вопросы

  • Нет связанных вопросов^_^