我想为我上传到firebase集合中的每个图像创建唯一的文档。
这是我创建文档的代码:
import { useState, useEffect } from 'react';
import { projectStorage, projectFirestore, timestamp } from '../firebase-config';
const useStorage = (file) => {
const [progress, setProgress] = useState(0);
const [error, setError] = useState(null);
const [url, setUrl] = useState(null);
useEffect(() => {
// references
const storageRef = projectStorage.ref(file.name);
const collectionRef = projectFirestore.collection('images');
storageRef.put(file).on('state_changed', (snap) => {
let percentage = (snap.bytesTransferred / snap.totalBytes) * 100;
setProgress(percentage);
}, (err) => {
setError(err);
}, async () => {
const url = await storageRef.getDownloadURL();
const createdAt = timestamp();
await collectionRef.add({ url, createdAt });
setUrl(url);
});
}, [file]);
return { progress, url, error };
}
export default useStorage;
但我得到了两份文件一张照片。
the postthe duplicate post
1条答案
按热度按时间jvlzgdj91#
每次调用
collectionRef.add
时,它都会创建一个具有唯一ID的新文档。如果希望集合中的某些内容是唯一的,最好使用该值作为该集合中的文档ID,并基于该ID设置文档,而不是每次都添加一个新文档。例如:
现在URL用于标识文档,因此根据定义,每个唯一的URL只有一个文档。
另见: