У меня есть объект поста, который состоит из двух частей (1) фото и (2) видео. В потоке публикации пользователь выбирает изображение и затем переходит к следующему экрану, на котором он выбирает видео. И фото, и видео загружаются в Firebase как часть объекта публикации. Посмотрите на простой дизайн.
каркасный дизайн
Я застреваю при создании объекта сообщения с URL-адресом фотографии и URL-адресом видео. Я пробовал:
1- После выбора фотографии и перехода к следующему шагу я загружаю фотографию в хранилище Firebase и создаю объект публикации в базе данных с URL-адресом фотографии и пустой строкой для URL-адреса видео.
2-Затем, выбрав видео, я загружаю видео в хранилище Firebase и пытаюсь обновить существующий объект сообщения с помощью URL-адреса видео ...
Однако я не смог обновить правильный объект сообщения и не знаю, как я могу получить postByAutoID, чтобы обновить правильное сообщение.
Вот как выглядит объект базы данных:
Я попытался передать photoURL во вторую часть сообщения, но загрузка и создание URL не завершены к моменту передачи переменной.
Любая помощь приветствуется!
@Jay, чтобы вы передавали данные от одного контроллера просмотра к другому, а затем загружали изображение / видео одновременно с одним storageRef для фото, другим для видео; захватить оба URL-адреса, а затем записать в базу данных? Или вам нужно будет просматривать загрузки по одной. У них разные места хранения, поэтому я думаю, что могу делать и то, и другое одновременно.
Зависит от варианта использования; есть несколько способов сделать это. В соответствии с приведенным выше комментарием получите ссылку на местоположение, запишите фотографию, получите ее URL-адрес и заполните объект, затем запишите видео и заполните объект, затем скажите объекту записать свои данные в firebase. Этот объект может быть структурой, содержащей, например, uid, photoURL и videoURL. Вы также можете создать узел в Firebase с исходными данными, передать ссылку другим представлениям и обновить узлы в этой ссылке по мере получения photoURL, а затем - videoURL. Это также зависит от того, как связаны ваши взгляды.
О, в структуре, опубликованной в вашем вопросе, дочерние узлы под узлом пользователей (с ключом uid) имеют повторяющийся дочерний элемент userId: uid. На самом деле нет причин для этого, поскольку вы знаете, что uid является родительским ключом для узла. Ничего не повредит, но в этом нет необходимости. Если вам нужны дальнейшие рекомендации, я могу опубликовать ответ на высоком концептуальном уровне, чтобы вы могли следить за процессом. Дай мне знать.





С помощью Интернета или JavaScript загрузки в облачное хранилище firebase возвращают обещания, поэтому Promise.all представляет собой массив отдельных загрузок.
Что касается swift или IOS, вам придется отправлять каждую загрузку (.putData) в память, а затем выполнять итерацию / цикл по ним.
См. Загрузить файлы на iOS, который обеспечивает отправную точку и добавляет свой цикл / итерацию.
// Data in memory let data = Data() // Create a reference to the file you want to upload let riversRef = storageRef.child("images/rivers.jpg") // Upload the file to the path "images/rivers.jpg" let uploadTask = riversRef.putData(data, metadata: nil) { (metadata, error) in guard let metadata = metadata else { // Uh-oh, an error occurred! return } // Metadata contains file metadata such as size, content-type. let size = metadata.size // You can also access to download URL after upload. riversRef.downloadURL { (url, error) in guard let downloadURL = url else { // Uh-oh, an error occurred! return } } }
Почему вы не можете просто создать ссылку на новый узел Firebase, заполнить его нужными данными и записать? myNewNode = myFirebase.childByAutoId () затем установите дочерние элементы photoUrl и photoUrl со значениями и запишите узел в Firebase?