Загрузите PDF-файл с Firebase и сохраните его локально на iOS - PullRequest
0 голосов
/ 15 апреля 2019

Мне нужно скачать pdf из хранилища и сохранить его локально на устройстве iOS, чтобы его можно было увидеть в Файлах.

Вот код, взятый из документов, которые я использую:

override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        let userID = Auth.auth().currentUser!.uid
        print(userID)

        // Get a reference to the storage service using the default Firebase App
        let storage = Storage.storage()

        // Create a storage reference from our storage service
        let storageRef = storage.reference()

        // Create a reference to the file you want to download
        let islandRef = storageRef.child("pdf/sample.pdf")

        // Create local filesystem URL
        let localURL = URL(string: "pdf/sample.pdf")!

        // Download to the local filesystem
        let downloadTask = islandRef.write(toFile: localURL) { url, error in
            if let error = error {
                // Uh-oh, an error occurred!
            } else {
                // Local file URL for "images/island.jpg" is returned
            }
        }

    }

Когда я пытаюсь запустить этот ViewController, он не падает, но выдает следующую ошибку:

"The file couldn’t be opened because the specified URL type isn’t supported." UserInfo={NSURL=pdf/sample.pdf}

Файл в хранилище Firebase сохраняется в папке с именем pdf/sample.pdf.В конце концов, я хочу взять ссылку из хранилища и передать ее в RealtimeDatabase, чтобы пользователь мог загрузить ее, просмотрев сведения о ней в табличном представлении.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Я думаю, что нужно указать, по какому пути к вашей локальной файловой системе вы хотите сохранить загруженный документ.Допустим, вы хотите использовать временную папку, чтобы сохранить pdf.Вы можете попробовать следующее:

let tmporaryDirectoryURL = FileManager.default.temporaryDirectory
let localURL = tmporaryDirectoryURL.appendingPathComponent("sample.pdf")

islandRef.write(toFile: localURL) { url, error in
    if let error = error {
       print("\(error.localizedDescription)")
    } else {
       self.presentActivityViewController(withUrl: url)
    }
 }

После того, как файл загружен, чтобы сохранить его в приложении Файлы, вам нужно будет использовать UIActivityViewController.

func presentActivityViewController(withUrl url: URL) {
    DispatchQueue.main.async {
      let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil)
      activityViewController.popoverPresentationController?.sourceView = self.view
      self.present(activityViewController, animated: true, completion: nil)
    }
}

У меня нет 'Я проверил это, но я предполагаю, что вы получите эту ошибку, потому что ваша переменная localURL не является URL-адресом файловой системы.

0 голосов
/ 15 апреля 2019

Вместо использования URL(string: String) при открытии файлов следует использовать URL(fileURLWithPath: String).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...