下载PDF,保存到文档目录并在UIWebView中加载它

时间:2016-11-30 18:05:17

标签: ios swift pdf directory document

我遇到下载pdf的问题,保存到文档目录并在Web视图中加载它。 我没有下载内容的经验,之前将内容保存到目录和UIWebView。

在我提出这个问题之前,我已经搜索了多个StackOverflow问题并尝试了我的最佳问题,但它仍然不起作用。

首先我是如何从网址下载PDF并将其保存到文档目录

let myURL = URL(string: "https://example/example/product.pdf")
let urlRequest = NSURLRequest(url: myURL!)

do {
    let theData = try NSURLConnection.sendSynchronousRequest(urlRequest as URLRequest, returning: nil)
    var docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last as? NSURL
    docURL = docURL?.appendingPathComponent("my.pdf") as NSURL?
    try theData.write(to: docURL as! URL)
    print("downloaded")
} catch (let writeError) {
    print("error : \(writeError)")
}

应用程序暂停一段时间并打印“已下载”

这是我查看文档目录中联系人列表

的方法
 let docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last)
        do{
            let contents = try (FileManager.default.contentsOfDirectory(at: docURL!, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles))
            print("There are")
            print(contents)
        }
        catch (let error)
        {
            print("error contents \(error)")
        }

打印“有[file:///private/var/mobile/Containers/Data/Application/DF6A310C-EB7E-405E-9B1B-654486B5D03A/Documents/my.pdf]”

这就是我将pdf加载到webView

的方法
var webView = UIWebView(frame : vc.view.frame)
webView.scalesPageToFit = true
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
var documentsDirectory = paths[0]
var filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf").absoluteString
var targetURL = URL(fileURLWithPath: filePath)
var request = URLRequest(url: targetURL)
webView.loadRequest(request)
vc.view.addSubview(webView)

WebView出现但没有显示任何内容。如果my.pdf真的以可读的PDF格式保存,我真的很困惑。

我不知道是否有一些东西,比如我必须在info.plist中添加一些东西或在app功能中启用一些东西。非常感谢你。

1 个答案:

答案 0 :(得分:1)

我没有查看所有代码,但以下两行是个问题:

var filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf").absoluteString
var targetURL = URL(fileURLWithPath: filePath)

URL absoluteString的值不会为您提供文件路径,因此filePath的值不是URL fileURLWithPath:初始值设定项的有效值。

URLString(作为路径)又回到URL有什么意义?只需将这两行合并为:

var targetURL = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf")

作为旁注,请使用一些一致性。在其他代码中,您可以使用以下方式获取Documents文件夹URL:

let docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last)

以及您使用的其他代码:

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
var documentsDirectory = paths[0]
var ... = URL(fileURLWithPath: documentsDirectory)...

选择一种方法并始终如一地使用它。由于您需要URL,请使用第一种方法。这意味着我建议的代码现在应该是:

let docURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!
let targetURL = docURL.appendingPathComponent("my.pdf")