目标C - 从Dropbox读取ePub文件

时间:2015-01-09 01:59:17

标签: ios objective-c xcode dropbox-api epub

所以我很遗憾这个并且对epub文件很新。我已经做了一些搜索,但似乎无法把所有东西放在我脑海里。

我的应用使用DropBox的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扩展名有关。或者从DropBox获取URL并将其提供给KFEpubKit工具之前可能还有一些事情要做?

最后,我期望必须使用UIWebView显示本书的文本。但我只是不确定如何处理这个.epub文件。我该怎么处理Dropbox的文件?任何帮助深表感谢。

1 个答案:

答案 0 :(得分:0)

快速浏览表明SSZipArchive需要本地文件URL,而不是远程HTTP URL。首先尝试下载文件(带有URL内容的NSData,然后写入某个临时文件),然后创建一个指向临时文件的文件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.

(从内存中编码。)所有正常的注意事项都适用于此 - 您希望在下载时执行正确的进度/错误处理,删除临时文件等等。