Получение содержимого файла по пути

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

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {

        let urlString = url.path
        let fileName = url.lastPathComponent
        let ref = DataService.instance.imagesStorageRef.child("\(fileName)")
         var contents = try? Data(contentsOf: url)
         print("contents: \(contents)")



        let uploadTask = ref.putData(contents! as Data, metadata: nil, completion: { (metadata, error) in ...}
}

file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/nutella.jpg содержимое: ноль

Затем я пытаюсь получить содержимое этого пути к файлу, чтобы передать его функции загрузки, которая загружает его в firebase. Однако, как бы я ни пытался получить этот контент, я всегда получаю нулевое значение. Пожалуйста, направьте меня в правильном направлении.


person misi06    schedule 27.11.2017    source источник
comment
Используйте do/catch и посмотрите, в чем ошибка при попытке получить содержимое URL-адреса.   -  person rmaddy    schedule 27.11.2017
comment
И какой режим вы использовали для выбора документа? Он был импортным или открытым?   -  person rmaddy    schedule 27.11.2017
comment
Я постараюсь сделать/поймать. Я использую «открытый» режим.   -  person misi06    schedule 27.11.2017
comment
Использовать импорт, а не открывать. Прочтите документацию о разнице между ними.   -  person rmaddy    schedule 27.11.2017
comment
Импорт и do/catch работают идеально. Большое спасибо. Я также столкнулся с ошибкой: [DocumentManager] Служба просмотра завершилась с ошибкой: Error Domain=_UIViewServiceErrorDomain Code=1 (null) UserInfo={Terminated=disconnect method} Знаете почему? Я пытался решить это, но безуспешно.   -  person misi06    schedule 28.11.2017
comment
@LeoDabus Это отдельный вопрос.   -  person rmaddy    schedule 28.11.2017


Ответы (1)


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

Здесь я вставляю пример кода..

 func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
        let fileURL = url as URL
        print("The Url is : \(fileURL)")
        let fileNameWithoutExtension = fileURL.pathExtension
        print("fileNameWithoutExtension: \(fileNameWithoutExtension)")
        do {
            let data = try Data(contentsOf: fileURL)
            print("data=\(data)")
            //TODO: call upload API
            self.sendAttachments()
        }
        catch {/* error handling here */}
    }
person NiravS    schedule 17.03.2018