当前位置: 首页 > 知识库问答 >
问题:

下载PDF文件并保存在文档目录中

庄实
2023-03-14
class ViewController: UIViewController {

    @IBOutlet weak var progressView: UIProgressView!

    override func viewDidLoad() {
        let _ = DownloadManager.shared.activate()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        DownloadManager.shared.onProgress = { (progress) in
            OperationQueue.main.addOperation {
                self.progressView.progress = progress
            }
        }
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        DownloadManager.shared.onProgress = nil
    }

    @IBAction func startDownload(_ sender: Any) {
        let url = URL(string: "https://d0.awsstatic.com/whitepapers/KMS-Cryptographic-Details.pdf")!
        let task = DownloadManager.shared.activate().downloadTask(with: url)
        task.resume()
    }
}

文件当前将转到:文件:///users/cybermac/library/developer/coresimulator/devices/caec75d0-423a-4fb2-b0d6-9e7cadb190a1/data/containers/data/application/8b5cbfc8-7058-48db-a1c4-872302a80610/library/caches/com.apple.nsurlsessiond/downloads/com.example.downloadtaskexample/cfnetworkdownload_q7ovlf.tmp

如何将其保存在/documents/中?

类似于以下内容:文件:///users/cybermac/library/developer/coresimulator/devices/CAEC75D0-423A-4FB2-B0D6-9E7CADB190A1/data/containers/data/application/64370B29-2C01-470F-AE76-17EF1A7BC918/documents/

其想法是,保存在该目录中的文件可以用于脱机读取(使用PDFKit或webKit)。只有在应用程序被删除的情况下才会被删除。


共有1个答案

澹台新知
2023-03-14

下载后需要将文件移动到自定义位置。实现URLSessionDownloadDelegate,您将收到下载文件的位置。

委托方法:

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL)

移动文件的代码:

do {
    let documentsURL = try
        FileManager.default.url(for: .documentDirectory,
                                in: .userDomainMask,
                                appropriateFor: nil,
                                create: false)

    let savedURL = documentsURL.appendingPathComponent("yourCustomName.pdf")
    try FileManager.default.moveItem(at: location, to: savedURL)
} catch {
    print ("file error: \(error)")
}
 类似资料:
  • 在Android11中引入了范围存储。根据文档,保存非媒体文件(如PDF)应使用存储访问框架。因此,在使用存储访问框架时,用户需要通过系统文件选择器选择位置来保存非媒体文件(PDF)。但如果你在Android11上使用whatsapp应用程序,并尝试保存PDF文件,它不会要求用户选择位置。默认情况下会将pdf文件保存到外部文档目录。我想在我的应用程序中复制相同的行为。有人能带我到这里来吗。

  • 问题内容: 我使用以下代码将文件保存在swift 3的文档目录中: 但是正如您所看到的,我不习惯获取文档目录路径,因为它仅给出URL而不是字符串。 问题: 如何从文件管理器获取字符串? 我的代码有崩溃的可能吗? 问题答案: 请反过来考虑。 建议使用此方法来处理文件路径,因为它包含用于添加和删除路径组件和扩展名的所有便捷方法,而不是Apple从中删除了这些方法。 不鼓励您连接诸如之类的路径。这很容易

  • 问题内容: 我正在尝试从网站下载PDF文件并将其保存到磁盘。我的尝试因编码错误而失败,或者导致PDF空白。 我知道这是某种编解码器问题,但我似乎无法使其正常工作。 问题答案: 在这种情况下,您应该使用: 从文件: 对于非文本请求,您还可以字节形式访问响应主体: 因此,这意味着:将输出作为字符串对象返回,在下载 文本文件 时使用它。如HTML文件等 并以字节对象返回输出,在下载 二进制文件 时使用它

  • 我可以通过以下服务下载pdf文件: 但是,当我运行该服务时,我得到了以下响应: %���� 10 obj 要打开pdf,我需要用第二个鼠标按钮点击响应链接: WS网址 然后选择“在新选项卡中打开”以打开pdf文件,看起来您正在运行该服务两次以获得一次pdf文件。 我想自动打开每个请求到WS的pdf文件。 这意味着每次您请求WS时,都应该返回直接在屏幕中打开的pdf文件。 有人能帮我修一下吗? Tk

  • 问题内容: 我有此功能可以将图像保存在tmp文件夹中 但是,当我打开应用程序的temp文件夹时,它是空的。将图像保存在temp文件夹中,我做错了什么? 问题答案: 不是获取的文件路径的正确方法,请改用: 或者 更好的是, 仅使用URL: 更好的是,使用 并检查成功或失败: Swift 3/4更新:

  • 我的服务器端代码是: 在我的客户机代码中,我得到的响应为200OK,但我无法保存我的文件在硬盘在下面的行,我提到的路径和位置,文件需要保存。不知道这里出了什么问题,任何帮助都将不胜感激。提前谢谢!!