Я хочу добавить изображение (сгенерированного пользователем поста) в Firebase Storage и его URL в Firestore DB.Но изображений может быть много, поэтому я хочу хранить их в папках в хранилище.
Таким образом, путь хранения выглядит следующим образом:
/${uid}/posts/${postId}/${image1.name}
Здесь postId
- этоссылка на документ Идентификатор новой публикации, которую я добавляю в Firestore.Но поскольку firestore не поддерживает пустой документ, использующий API .add()
, мне нужно написать фиктивную опцию, просто чтобы получить идентификатор документа (который является postId)
db.collection('posts').add({isExist: true})
.then(docRef => { postDocRef = docRef; postId = docRef.id } )
Теперь я использую этот postId
в пути хранения и загрузить изображение.
Когда загрузка будет завершена, я получу ее URL-адрес для загрузки (getDownloadURL()
), который я хочу сохранить в БД Firestore.Поэтому мне пришлось инициировать еще одну запись в тот же документ и обновить ее с помощью URL-адреса загрузки образа.
postDocRef.update({ url : storageDownloadUrl })
Весь этот процесс вызывает две операции записи в Firestore.
Есть ли лучший способ, который может привести к одиночной записи в Firestore.
Несколько вариантов, которые я подумал:
- Сгенерировать postId локально самостоятельно, это будетвыступать в качестве идентификатора документа, а также.[ Предлагает ли хранилище Firebase уникальные идентификаторы файлов?
- Не используйте postId в пути хранения, вместо этого генерируйте уникальное изображение. Name
- Firestore рассматривает возможность предоставления ссылки на пустые документы, как в реальном времени БД [ Эквивалент .push в Firestore?