我之前使用RNFirebase将图像上传到firebase。 当时,我使用了这段代码:
firebase
.storage()
.ref()
.child(`posts/${fileName}`)
.putFile(postImage.uri)
.then((value) => {
console.log('Put file response :', value);
在这里,
let result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.All,
// allowsEditing: true,
// aspect: [4, 3],
quality: 1
});
console.log(result);
if (!result.cancelled) {
this.setState({ imageData: result });
}
postImage = result.uri
即postImage是图片的url。 但是,我必须使用 firebase 更改代码,并且必须将图像上传到 firebase 存储和数据库。 所以我使用了这段代码:
firebase
.storage()
.ref()
.child(`posts/${fileName}`)
.put(postImage.uri)
.then((value) => {
console.log('Put file response :', value);
但结果屏幕上有错误。
它在屏幕上返回[object object]
。
所以我查看了 firebase 的文档,函数 put
必须具有如下数据:
put(数据 | blob)
但我无法理解这一点。
我该怎么办?
告诉我怎么解决吧~
谢谢并致以最美好的祝愿。
最佳答案
这是我用来存储的代码片段 您需要检查 ImagePicker 代码,即 expo 中文件的路径 它用于裸 react native 应用程序
const [progress, setProgress] = useState(0);
const [uploading, setUploading] = useState(false);
const storageForDefaultApp = storage();
const uploadImage = async image => {
setUploading(true);
setProgress(0);
// console.log('image', image);
const task = storageForDefaultApp.ref(image.ref).putFile(image.path);
task.on('state_changed', snap => {
setProgress(Math.round(snap.bytesTransferred / snap.totalBytes) * 10000);
});
try {
const final = await task;
console.log('final image', final);
} catch (e) {
console.error(e);
}
setUploading(false);
};
const _openPicker = () => {
ImagePicker.openPicker({
cropping: false,
multiple: false,
compressImageQuality: 0.8,
mediaType: 'photo',
}).then(image => {
let timestamp = moment().format(TIMESTAMP_FORMAT);
const final = {...image, id: timestamp, ref: timestamp + '.jpeg'};
setFiles([...files, final]);
uploadImage(final);
});
};
关于javascript - 如何在expo React Native中将图像上传到firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60753537/