【发布时间】:2021-11-15 04:00:08
【问题描述】:
我很难将文件放入 firebase,以便检索其 getDownloadURL。
这就是我得到的
import React, {useState, useEffect} from 'react'
import { Container, Button, Row, Col, Form, Alert } from 'react-bootstrap'
import PageHeader from '../components/PageHeader'
import { projectFirestore, projectStorage } from '../firebase/config'
const Dashboard = () => {
const [ error, setError] = useState('')
const [ name, setName ] = useState("")
const [ link, setLink ] = useState("")
const [ file, setFile ] = useState(null)
const [ desc, setDesc ] = useState("")
const [ projects, setProjects ] = useState([])
const [ url, setUrl ] = useState("")
const [ message, setMessage ] = useState("")
useEffect(() => {
projectFirestore.collection('projects').onSnapshot((snapshot) =>{
const tempProject = []
snapshot.forEach(doc => {
tempProject.push({...doc.data(), id: doc.id});
})
setProjects(tempProject)
})
}, [])
const onNameChange = (e) => { setName(e.target.value) }
const onLinkChange = (e) => { setLink(e.target.value) }
const onDescChange = (e) => { setDesc(e.target.value) }
const handleSubmit = async (e) => {
e.preventDefault()
try {
setMessage('')
setError('')
if(!name){
return
}
const storageRef = projectStorage.ref()
const fileRef = storageRef.child(file.name)
await fileRef.put(file)
setUrl(fileRef.getDownloadURL())
projectFirestore.collection('projects')
.doc( name, link, url, desc )
.set({ name, link, url, desc })
setMessage('Project added succesfully')
setName('')
setLink('')
setFile(null)
setDesc('')
} catch {
setError('Project fail to add')
}
}
return (
<div className="">
<Container>
<PageHeader title="Dashboard" />
<Row>
<Col xs={12}>
<h4>Add Project</h4>
{message && <Alert variant="success">{message}</Alert> }
{error && <Alert variant="danger">{error}</Alert> }
<Form onSubmit={handleSubmit}>
<Row>
<Col xs={12} lg={8}>
<Form.Group className="mb-3">
<Form.Label>Name</Form.Label>
<Form.Control
type="text"
value={name}
onChange={onNameChange}/>
</Form.Group>
<Form.Group className="mb-3">
<Form.Label>Description</Form.Label>
<Form.Control
as="textarea"
rows={5}
value={desc}
onChange={onDescChange}/>
</Form.Group>
<Form.Group className="mb-3">
<Form.Label>Link</Form.Label>
<Form.Control
type="text"
value={link}
onChange={onLinkChange} />
</Form.Group>
</Col>
<Col xs={12} lg={4}>
<Form.Group className="mb-3">
<Form.Label>Image</Form.Label>
<Form.Control type="file" onChange={(e) => setFile(e.target.files[0])}/>
</Form.Group>
<div>
{projects.map(project => (
<div key={project.id} to={`/${project.id}`}>
<img src={project.url} alt={project.name} />
<h5>{project.name}</h5>
</div>
))}
</div>
</Col>
</Row>
<div className="d-flex justify-content-end">
<Button variant="primary" type="submit"> Send</Button>
</div>
</Form>
</Col>
</Row>
</Container>
</div>
)
}
export default Dashboard
【问题讨论】:
-
您面临什么问题?有什么错误吗?
-
我可以更新 firebase 中的所有其他文件,但我在 url firebase 属性上得到了 nada。我检查了存储,图像没有向上推
-
这可能是因为未正确处理承诺/尝试我的答案中的代码。
标签: javascript reactjs firebase firebase-storage