Загрузите PDF-файл в хранилище Firebase ⇐ IOS
-
Гость
Загрузите PDF-файл в хранилище Firebase
Привет всем, я пытаюсь импортировать файл PDF из icloud через свое приложение, используя модификатор .fileImporter, а затем я хотел бы сохранить его в Firebase Storage. .
Похоже, что получение файла через .fileImporter не вызывает проблем, но когда я пытаюсь сохранить (через URL-адрес, полученный из .fileImporter), сохранение в >Firebase Storage не работает, и моя консоль выдает следующую ошибку:
Необязательно («Файл по URL-адресу: Private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Condivisa/Archivio%20Documenti/Biglietti366527.pdf недоступен. Убедитесь, что URL-адрес файла не является каталогом, символической ссылкой или недопустимым URL-адресом.")
Где я делаю не так?
Я бы хотел, чтобы пользователь моего приложения мог получить файл, взятый из любого облака, на которое он подписан, и сохранить его в Firebase Storage, чтобы он всегда был доступен в моем приложении.
Это код, который я использую. Можете ли вы мне чем-нибудь помочь?
struct ImportFile: Просмотр { @State Private var showFileImporter = false частная вар handlePickedPDF: (URL) -> Void = {_ in } var body: some View { VStack(интервал: 24) { ScrollView(.horizontal) { LazyHGrid(rows: [.init(.adaptive(минимум: 130))], содержимое: { ForEach(0..) Кнопка("ФАЙЛ") { showFileImporter = правда } .fileImporter( isPresented: $showFileImporter, разрешенные типы контента: [.pdf], позволяетMultipleSelection: true ) { результат в результат переключения { случай .success(пусть файлы): files.forEach { файл в // получаем доступ к каталогу let gotAccess = file.startAccessingSecurityScopedResource() если !gotAccess {возврат } // доступ к URL-адресу каталога // (прочитать шаблоны в каталоге, сделать закладку и т.д.) handlePickedPDF (файл) // освобождаем доступ file.stopAccessingSecurityScopedResource() печать(файл.absoluteURL) // Создаем ссылку на хранилище из нашей службы хранения пусть StorageRef = Storage.storage().reference() // Файл, расположенный на диске пусть localFile = URL (строка: file.absoluteString)! // Создаем ссылку на файл, который вы хотите загрузить пусть RiversRef = StorageRef.child("doc/") // Загрузите файл по пути "images/rivers.jpg" let uploadTask = RiversRef.putFile(from: localFile, метаданные: ноль) {метаданные, ошибка в охранник пусть метаданные = метаданные еще { // Ой-ой, произошла ошибка! возвращаться } // Метаданные содержат метаданные файла, такие как размер и тип содержимого. пусть размер = метаданные.размер // Вы также можете получить доступ к URL-адресу загрузки после загрузки. RiversRef.downloadURL { (url, ошибка) в охранник пусть downloadURL = URL еще { // Ой-ой, произошла ошибка! возвращаться } } } } случай .failure(пусть ошибка): // обрабатываем ошибку печать (ошибка) } } } }) } .scrollIndicators(.скрытый) } } }
Привет всем, я пытаюсь импортировать файл PDF из icloud через свое приложение, используя модификатор .fileImporter, а затем я хотел бы сохранить его в Firebase Storage. .
Похоже, что получение файла через .fileImporter не вызывает проблем, но когда я пытаюсь сохранить (через URL-адрес, полученный из .fileImporter), сохранение в >Firebase Storage не работает, и моя консоль выдает следующую ошибку:
Необязательно («Файл по URL-адресу: Private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Condivisa/Archivio%20Documenti/Biglietti366527.pdf недоступен. Убедитесь, что URL-адрес файла не является каталогом, символической ссылкой или недопустимым URL-адресом.")
Где я делаю не так?
Я бы хотел, чтобы пользователь моего приложения мог получить файл, взятый из любого облака, на которое он подписан, и сохранить его в Firebase Storage, чтобы он всегда был доступен в моем приложении.
Это код, который я использую. Можете ли вы мне чем-нибудь помочь?
struct ImportFile: Просмотр { @State Private var showFileImporter = false частная вар handlePickedPDF: (URL) -> Void = {_ in } var body: some View { VStack(интервал: 24) { ScrollView(.horizontal) { LazyHGrid(rows: [.init(.adaptive(минимум: 130))], содержимое: { ForEach(0..) Кнопка("ФАЙЛ") { showFileImporter = правда } .fileImporter( isPresented: $showFileImporter, разрешенные типы контента: [.pdf], позволяетMultipleSelection: true ) { результат в результат переключения { случай .success(пусть файлы): files.forEach { файл в // получаем доступ к каталогу let gotAccess = file.startAccessingSecurityScopedResource() если !gotAccess {возврат } // доступ к URL-адресу каталога // (прочитать шаблоны в каталоге, сделать закладку и т.д.) handlePickedPDF (файл) // освобождаем доступ file.stopAccessingSecurityScopedResource() печать(файл.absoluteURL) // Создаем ссылку на хранилище из нашей службы хранения пусть StorageRef = Storage.storage().reference() // Файл, расположенный на диске пусть localFile = URL (строка: file.absoluteString)! // Создаем ссылку на файл, который вы хотите загрузить пусть RiversRef = StorageRef.child("doc/") // Загрузите файл по пути "images/rivers.jpg" let uploadTask = RiversRef.putFile(from: localFile, метаданные: ноль) {метаданные, ошибка в охранник пусть метаданные = метаданные еще { // Ой-ой, произошла ошибка! возвращаться } // Метаданные содержат метаданные файла, такие как размер и тип содержимого. пусть размер = метаданные.размер // Вы также можете получить доступ к URL-адресу загрузки после загрузки. RiversRef.downloadURL { (url, ошибка) в охранник пусть downloadURL = URL еще { // Ой-ой, произошла ошибка! возвращаться } } } } случай .failure(пусть ошибка): // обрабатываем ошибку печать (ошибка) } } } }) } .scrollIndicators(.скрытый) } } }
Мобильная версия