【问题标题】:ObjectiveC - Reading ePub File Gotten From DropboxObjective C - 读取从 Dropbox 获取的 ePub 文件
【发布时间】:2015-01-09 01:59:16
【问题描述】:

所以我对这个很迷茫,而且对 epub 文件真的很陌生。我已经进行了一些搜索,但似乎无法将所有内容都放在我的脑海中。

我的应用使用 DropBox 的选择器 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 实用程序来解压缩文件。从这一点开始,我有点卡住了。与epubURL.path 一起使用时,[SSZipArchive unzipFileAtPath: toDestination:] 调用似乎失败了。我不确定这是否与我的文件是 .epub 扩展名而不是 .zip 扩展名这一事实有关。或者,在从 DropBox 获取 URL 并将其提供给 KFEpubKit 工具之前,可能还有一些事情要做?

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

【问题讨论】:

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


    【解决方案1】:

    快速浏览表明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.
    

    (从内存中编码。)所有正常的注意事项都适用于此处——您需要对下载进行适当的进度/错误处理,摆脱临时文件等。

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多