gpt4 book ai didi

javascript - 获取: TypeError: undefined is not a function (evaluating 'filePath.replace(' file://', ' ')') while uploading a blob to firebase storage

转载 作者:行者123 更新时间:2023-12-03 00:35:20 25 4
gpt4 key购买 nike

我正在开发一个带有 firebase 存储的小型 React Native POC,用户在其中选择图像并将其上传到 /uid/ 目录下的 firebase 存储。我正在使用 react-native-firebase 在应用程序中使用 firebase。

我有图像的 uri,我使用该图像使用 RNFetchBlob 创建其 Blob,然后尝试将 Blob 上传到 Firebase。

这里是处理 blob 制作和上传的代码。

handleUploadTask = (mime = 'application/octet-stream') => {
const {imageSource} = this.state;
this.setState({uploading: true});

const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;

fs.readFile(imageSource.uri, 'base64')
.then((data) => {
return Blob.build(data, { type: `${mime};BASE64` })
}).then(blob => {
console.log('going to upload');
this.uploadBlobToFirebase(blob);
}).catch(error => {
console.error('fs error:', error);
})
}

这是uploadBlobToFirebase

uploadBlobToFirebase = (blob) => {
const currentUserId = firebase.auth().currentUser.uid;
const path = `/${currentUserId}/`;
const unsubscribe = firebase.storage().ref(path).putFile(blob).on(
firebase.storage.TaskEvent.STATE_CHANGED,
(snapshot) => {
const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
//restricting progress to be shown with only 0,2,4,... 98, 100.
if (progress % 2 == 0) {
this.setState({
uploadProgress: progress
})
}

if (snapshot.state === firebase.storage.TaskState.SUCCESS) {
this.setState({
uploading: false,
}, () => {
//TODO: should also add this image to flatlist.
//Get download url and set to image in flatlist.
Alert.alert('Upload completed');
})

}
},
(error) => {
this.setState({
uploading: false,
}, ()=>{
unsubscribe();
console.error(error);
})
},
);
}

函数handleUploadTask在上传按钮的onPress上被调用,并且运行良好直到console.log('going to upload'),然后最终进入catch有错误:

'fs error:', { [TypeError: undefined is not a function (evaluating 'filePath.replace('file://', '')')] line: 115903, column: 41, sourceURL: 'http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false' }

我这里一片空白。无法找到导致问题的 file.replace 及其原因。任何帮助,将不胜感激。谢谢。

最佳答案

putFile 需要位于 native 存储上的文件的字符串路径。

您需要将 blob 保存到设备上临时存储中的文件中,然后向 putFile 方法提供该临时文件的路径。

React Native Firebase 确实提供了一些静态信息,可以帮助定位设备上的某些目录,例如临时目录通过 firebase.storage.Native.TEMPORARY_DIRECTORY_PATH 位于其中。请参阅here有关这些的文档。

它的设计是这样的,因为与保持一切 native 相比,通过 React Native 桥传输文件/blob 会对性能造成很大影响。

根据您的示例代码,您应该能够执行以下操作;

firebase.storage().ref(path).putFile(imageSource.uri).on(/* ... */);

包含 putFile 示例的引用文档位于此处:https://rnfirebase.io/docs/v5.x.x/storage/reference/Reference#putFile

关于javascript - 获取: TypeError: undefined is not a function (evaluating 'filePath.replace(' file://', ' ')') while uploading a blob to firebase storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53686553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com