我在我的网站上有一个处理文件上传的页面,但是自从我升级了Firebase(我猜是Firebase v7/8)后,这个特殊的功能不再工作了。
为了在firebase存储中处理文件上载,我创建了一个自定义钩子,在这里我使用useffect
,因为每次有新的文件值时都需要运行它。我为试图上载的文件传递了一个参数(文件
),并将其存储在数据库中,这样数据库就包含了所有图像的url。然后,我使用这些数据将图像加载到react组件中。
我得到的错误是:
未捕获类型错误:projectStorage.ref不是函数
由于我使用的是Firebase v9
,所以我对它有点困惑,不知道要更改什么。谢谢你的帮助,我真的很感激。
useStorage.jsx(自定义挂钩)
import {projectStorage, projectFirestore, timestamp} from '../Firebase'
import { useEffect, useState } from 'react'
function useStorage(file) {
const [progress, setProgress] = useState(0);
const [error, setError] = useState(null);
const [url, setUrl] = useState(null);
useEffect(() => {
const storageRef = projectStorage.ref(file.name)
const collectionRef = projectFirestore.collection('images');
storageRef.put(file).on('state_changed', (snap) => {
let percent = (snap.bytesTransferred / snap.totalBytes) * 100;
setProgress(percent >> 0); // or Math.trunc()
}, (err) => {
setError(err);
}, async () =>{
const url = await storageRef.getDownloadURL();
const createdAt = timestamp();
collectionRef.add({ url, createdAt});
setUrl(url);
});
}, [file]);
return {progress, url, error};
}
export default useStorage;
我是这样加的
uploadTask.on("state_changed", (snapshot) => {
console.log(snapshot);
let percent = (snap.bytesTransferred / snap.totalBytes) * 100;
setProgress(percent >> 0);
}, (err) => {
setError(err);
}, async () =>{
const url = await storageRef.getDownloadURL();
const createdAt = timestamp();
collectionRef.add({ url, createdAt});
setUrl(url);
});
但是得到了一个错误未捕获(在promise)参考:快照没有定义
有一个顶级函数uploadByteResubable()
可以在监视进度的同时上载文件。尝试重构代码,如下所示:
import {projectStorage, projectFirestore, timestamp} from '../Firebase'
import { ref as storageRef, uploadBytesResumable } from "firebase/storage";
useEffect(() => {
// Creating a storage reference
const storageReference = storageRef(projectStorage, file.name);
// Creating an upload task
const uploadTask = uploadBytesResumable(storageReference, file);
// Monitoring upload progress
uploadTask.on("state_changed", (snapshot: any) => {
console.log(snapshot);
// render progress
});
}, [file])
在Web上使用云存储上传文件时检查留档。
问题内容: 我试图了解如何使用Node.js在Firebase Storage中上传文件。我的第一次尝试是使用Firebase库: 但是事实证明,Firebase无法从服务器端上传文件,正如在文档中明确指出的那样: Firebase存储不包含在服务器端Firebase npm模块中。相反,您可以使用gcloud Node.js客户端。 在代码中,您可以使用以下方式访问存储分区: 我们可以在没有Go
但事实证明,Firebase无法从服务器端上传文件,正如它在文档中明确说明的那样: Firebase存储不包括在服务器端Firebase npm模块中。相反,您可以使用gcloud Node.js客户机。 我的第二次尝试是使用库,就像文档中提到的:
我需要帮助使用Firebase函数将大型JSON文件从Firebase存储流到Firestore。 我想将几个大的换行JSON文件(11x700MB)传输到FireStore。我正在尝试从Firebase存储加载它们,对文件进行流式处理,并将内容写入Firestore集合。 我现在不知道该怎么做,但我很感激你的帮助。
我试图上传一个图像文件,我得到了使用Imagepicker。 但上面的代码返回以下错误 VERBOSE-2:ui\u dart\u状态。cc(186)]未处理的异常:MissingPluginException(未找到方法任务的实现#通道插件上的startPutFile.flatter.io/firebase_存储)#0 MethodChannel_invokeMethod包:flatter/..
根据文档,我必须把文件名传递给函数才能上传一个文件。 我想能做这样的事
我们有我们的公司网站,我们经常有很多工作机会。因此,我们创建了一个表格,有兴趣的候选人可以直接申请。我们也有一个简历上传工具,现在简历上传和存储使用这个简历存储在我们的服务器上,但我们不想浪费服务器空间,所以我们考虑只创建一个专门的文件夹为简历在谷歌驱动器,无论何时用户上传他的简历从我们的网站,它将得到一个谷歌驱动器文件夹存储。这可能吗。我们不想做与谷歌表单或表单+,因为我们有表单匹配我们的网站主