Я использую Swift и загружаю файл со своего локального устройства в хранилище хранилища в формате просто необработанных битов. Загрузка работает, и я вижу документ в базе данных вместе с файлом правильного размера.
Теперь, зная местоположение документа в Firestore (URL), я пытаюсь загрузить файл на свое локальное устройство. Я хочу, чтобы файл отображался в приложении «Файлы» iOS в разделе «Загрузки». Когда я нажимаю кнопку «Загрузить», все работает нормально, без ошибок, однако файл не отображается в «Файлах». Если я возьму URL-адрес местоположения файла и вставлю его в Google, файл автоматически загрузится через Google.
Когда я проверяю приложение «Файлы», я теперь вижу загрузку. Когда я нажимаю на него, отображается только идентификатор документа и размер байта. Если я проверю его на своем Mac, файл будет выглядеть так, как показано ниже. Я знаю, что загружаю файл неправильно, поскольку он не отображается в приложении. Но я тоже загружаю неправильно, потому что не могу просмотреть настоящий текст?

.
импортировать SwiftUI импортировать идентификаторы UniformTypeIdentifiers импортировать Firebase импортировать FirebaseStorage структура FilePicker: Посмотреть { @State Private var showPicker = false //для этого примера это URL-адрес PDF-документа, хранящегося в хранилище Firestore. @State Private var FinalURL: Строка? = "https://firebasestorage.googleapis.com: ... ea81-45c2- 8113-042а9д021д05" var body: some View { ВСтек { Разделитель() если пусть URL = FinalURL { Кнопка (действие: { DownloadFile(urlS: URL) }, этикетка: { Текст("скачать") }) } Кнопка (действие: { showPicker.toggle() }, этикетка: { Изображение (имя системы: «скрепка») .padding() .foregroundStyle(.blue) .background(.gray) .clipShape(Круг()) }) Разделитель() } .fileImporter(isPresented: $showPicker, AllowContentTypes: [UTType.data]) { результат делать { пусть URL = попробуйте result.get() пусть доступ = url.startAccessingSecurityScopedResource() отложить { если получить доступ к { url.stopAccessingSecurityScopedResource() } } если позволить fileData = попробовать? Данные (contentsOf: URL) { uploadFile(data: fileData, location: "files") {urlS в печать(URLS) окончательныйURL = URLS } } } ловить { print("Ошибка выбора файла: \(ошибка)") } } } func downloadFile(urlS: String) { охранник пусть URL = URL (строка: urlS) еще { возвращаться } let downloadTask = URLSession.shared.dataTask(with: url) { (данные, ответ, ошибка) в если пусть ошибка = ошибка { print("Ошибка загрузки файла: \(ошибка)") возвращаться } если пусть данные = данные { saveFile(данные: данные, имя_файла: "загрузить\(UUID().uuidString.prefix(5))") } } скачатьTask.resume() } func saveFile (данные: данные, имя_файла: строка) { Guard let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { возвращаться } пусть fileURL = documentURL.appendingPathComponent (имя файла) делать { попробуйте data.write(to: fileURL) print("Файл сохранен") } ловить { print("Ошибка сохранения файла: \(ошибка)") } } func uploadFile (данные: данные, местоположение: строка, завершение: @escaping (String) -> Void) { let ref = Storage.storage().reference(withPath: "/\(location)/\(NSUUID().uuidString)") ref.putData(data, метаданные: ноль) { метаданные, ошибка в если let err = ошибка { распечатать (ошибиться) } ref.downloadURL { (url, ошибка) в Guard let downloadURL = url?.absoluteString else { завершение("") возвращаться } завершение (URL загрузки) } } } }
Мобильная версия