Скачать и просмотреть документ в ios из хранилища Firebase - PullRequest
0 голосов
/ 25 июня 2018

У меня есть ссылка на хранилище Firebase для документа, который я хочу загрузить в каталог Document моего устройства ios, а затем просмотреть его с помощью модуля QuickLook.Я могу загрузить документ на устройстве iOS, но он не сохраняется под именем, которое я предоставляю.Я хочу создать следующую структуру каталогов, а затем нужно сохранить документ в папке "doc".Documents / chat / doc

следующий код предназначен для создания "/ chat / doc" внутри директории документов Iphone.Где folderName будет содержать "/chat/doc".

    func createDocument(folderName: String ,completion: @escaping(Bool,String)->()){
    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
    if let documentsDirectory = path{
        //
        let docDirectoryPath =  documentsDirectory.appending(folderName)
        let fileManager = FileManager.default

        if !fileManager.fileExists(atPath: docDirectoryPath) {
            do {
                try fileManager.createDirectory(atPath: docDirectoryPath,
                                                withIntermediateDirectories: true,
                                                attributes: nil)
                //return path on success
                completion(true,docDirectoryPath)
                return
            } catch {
                print("Error creating folder in documents dir: \(error.localizedDescription)")
                completion(false,error.localizedDescription)
                return
            }
        }
        completion(true,docDirectoryPath)
    }
}

после создания папки, я хочу скачать документ и нужно сохранить во вновь созданной папке в каталоге документов.

Следующий кодбудет загружать документ.

func downloadDocument(){

    createDocument(folderName: "/chat/doc") { (status, path) in
        if let docURL = self.documentURL{
            if status{
                //folder is created now download document

                let docDownloadRef = Storage.storage().reference(forURL: docURL)

                //get documents metadata from firebase to get document name
                docDownloadRef.getMetadata { metadata, error in
                    if let error = error {
                        // Uh-oh, an error occurred!
                    } else {
                        //get document name from metadata

                        if let fileName = metadata?.name{

                            //create file system url to store document
                            let docsurl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)

                            let myurl = docsurl.appendingPathComponent("chat/\(fileName)")

                            _ = docDownloadRef.write(toFile: myurl) { url, error in
                                if let error = error {
                                    print(error.localizedDescription)
                                } else {
                                    // Local file URL for document is returned
                                    print("doc url \(url?.absoluteString)")
                                }
                            }
                        }
                    }
                }

            }else{
                //folder is not created show document using online location
            }
        }
    }
}

Ultimate goal is to achieve something like this "Documents/chat/doc/abc.doc"

, но мой код не хранит документ с использованием имени файла, он хранится как этот "Documents / chat / doc", где документ считается документом, а не папкой.

Пожалуйста, помогите, дайте мне знать, что я делаю неправильно.Спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

Когда вы создаете url в нижней строке, здесь вам не хватает пути к папке doc.

let myurl = docsurl.appendingPathComponent("chat/\(fileName)")

Это сохранит в папку chat. При создании i.e folderName: "/chat/doc" вам нужно передать ту же папку, поэтому она должна быть

let myurl = docsurl.appendingPathComponent("chat/doc/\(fileName)")
...