下载 PDF,保存到文档目录并加载到 UIWebView
Download PDF, saving to document directory and loading it in UIWebView
我在下载 pdf、保存到文档目录并在 Web 视图中加载它时遇到问题。
我之前没有下载东西、保存东西到目录和 UIWebView 的经验。
在我问这个问题之前,我已经搜索了多个 Whosebug 问题并尽力了,但仍然没有用。
首先这是我从url下载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)")
}
应用程序暂停一会儿并打印"downloaded"
这是我在文档目录中查看联系人列表的方式
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)")
}
它打印"There are [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 中添加一些东西或在应用程序功能中启用一些东西。非常感谢。
我没有查看所有代码,但以下两行是一个问题:
var filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf").absoluteString
var targetURL = URL(fileURLWithPath: filePath)
URL absoluteString
的值没有为您提供文件路径,因此 filePath
的值不是 URL fileURLWithPath:
初始值设定项的有效值。
从 URL
到 String
(作为路径)再回到 URL
有什么意义?只需将这两行组合成:
var targetURL = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf")
作为旁注,使用一些一致性。在其他代码中,您使用
获取文档文件夹 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")
我在下载 pdf、保存到文档目录并在 Web 视图中加载它时遇到问题。 我之前没有下载东西、保存东西到目录和 UIWebView 的经验。
在我问这个问题之前,我已经搜索了多个 Whosebug 问题并尽力了,但仍然没有用。
首先这是我从url下载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)")
}
应用程序暂停一会儿并打印"downloaded"
这是我在文档目录中查看联系人列表的方式
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)")
}
它打印"There are [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 中添加一些东西或在应用程序功能中启用一些东西。非常感谢。
我没有查看所有代码,但以下两行是一个问题:
var filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf").absoluteString
var targetURL = URL(fileURLWithPath: filePath)
URL absoluteString
的值没有为您提供文件路径,因此 filePath
的值不是 URL fileURLWithPath:
初始值设定项的有效值。
从 URL
到 String
(作为路径)再回到 URL
有什么意义?只需将这两行组合成:
var targetURL = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf")
作为旁注,使用一些一致性。在其他代码中,您使用
获取文档文件夹 URLlet 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")