我之前使用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是图片的网址。但是,我必须使用Firebase更改代码,并且必须将图像上传到Firebase存储和数据库。所以我用下面的代码:
firebase
.storage()
.ref()
.child(`posts/${fileName}`)
.put(postImage.uri)
.then((value) => {
console.log('Put file response :', value);
但是结果在屏幕上显示错误。它在屏幕上返回[object object]
。因此,我查看了firebase的文档,并且函数put
必须具有以下数据:put(data | blob)
但是我不明白这一点。我该怎么办?让我知道如何解决〜谢谢,祝你好运。
这里是我用来存储的代码段您需要检查ImagePicker代码,即expo中文件的路径它用于裸反应本机应用]
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);
});
};