Сохраненный файл pdfFile не найден в каталоге «files» на iphone - PullRequest
0 голосов
/ 31 декабря 2018

Я посмотрел на все вопросы «сохранить pdf-файл» на «SO», и в этот момент я ударился головой о стену с такой проблемой:

Я загружаю pdf-файл (из хранилища Firebase) ипопробуйте сохранить его с этим кодом:

static func getPdf(firebaseStoragePath:String){
    let ref = Storage.storage().reference().child(firebaseStoragePath)

    let documentsURL:NSURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! as NSURL
    let fileURL = documentsURL.appendingPathComponent("doc.pdf")
    print("***fileURL: ",fileURL ?? "")

    let task = ref.write(toFile: fileURL!)

    task.observe(StorageTaskStatus.success) { (snap) in
        print("success")
    }
}

Появляется, что загрузка прошла успешно, но файл не отображается в папке «файлы» на моем iPhone и не может найти способ доступа к нему.Распечатанный URL-адрес файла выглядит следующим образом:

file: ///var/mobile/Containers/Data/Application/635B2D57-CA7B-44EF-BDF1-4308CABD8ED5/Documents/doc.pdf

Я пытался записать его в ".downloadsDirectory" (как и некоторые другие), но получил сообщение об ошибке, что доступ не разрешен.

Что я делаю не так?

1 Ответ

0 голосов
/ 31 декабря 2018

Здесь ваш PDF-файл хранится в пространстве документа вашего приложения.Так что вы не можете увидеть его в приложении Files .Все документы, сохраненные в папке Document вашего приложения, можно просмотреть через iTunes в Обмен файлами , но сначала необходимо добавить разрешение в Info.plist .:

  • UIFileSharingEnabled : приложение поддерживает общий доступ к файлам iTunes

Для хранения документа в Файлы необходимо использоватьбиблиотека UIDocumentInteractionController:

let documentInteractionController = UIDocumentInteractionController()

func downloadPdf(firebaseStoragePath:String){
    let ref = Storage.storage().reference().child(firebaseStoragePath)

    let documentsURL: NSURL = FileManager.default.urls(for: .temporaryDirectory, in: .userDomainMask).first! as NSURL
    let fileURL = documentsURL.appendingPathComponent("doc.pdf")

    let task = ref.write(toFile: fileURL!)

    task.observe(StorageTaskStatus.success) { (snap) in
        DispatchQueue.main.async {
            documentInteractionController.url = documentsURL
            documentInteractionController.uti = documentsURL.typeIdentifier ?? "public.data, public.content"
            documentInteractionController.name = documentsURL.localizedName ?? url.lastPathComponent
            documentInteractionController.presentPreview(animated: true)
        }
    }
}

extension URL {
    var typeIdentifier: String? {
        return (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier
    }
    var localizedName: String? {
        return (try? resourceValues(forKeys: [.localizedNameKey]))?.localizedName
    }
}

Не забудьте добавить эти разрешения в файл Info.plist :

  • UIFileSharingEnabled : приложение поддерживает общий доступ к файлам iTunes
  • LSSupportsOpeningDocumentsInPlace : поддерживает открытие документов на месте

Для получения дополнительной информации об использовании Files и UIDocumentInteractionController вы можете проверить это сообщение в блоге .

...