javascript - 尝试将 blob 上传到 Firebase 存储时出错(React Native)
问题描述
我的 React-Native 应用程序中有一个图像选择器组件,允许用户选择图像。然后将其保存到 this.state.imageUri。我的目标是将图像上传到 Firebase 存储,然后将其链接到实时数据库,以便可以针对特定列表项对其进行访问。我为此使用了两个功能:
uriToBlob = (uri) => {
console.log('uri: ' + uri)
return new Promise(function(resolve, reject) {
try {
var xhr = new XMLHttpRequest();
xhr.open("GET", uri);
xhr.responseType = "blob";
xhr.onerror = function() {reject("Network error.")};
xhr.onload = function() {
if (xhr.status === 200) {resolve(xhr.response)}
else {reject("Loading error:" + xhr.statusText)}
};
xhr.send();
}
catch(err) {reject(err.message)}
})
}
和
uploadToFirebase = (blob) => {
console.log('uploading to firebase')
return new Promise((resolve, reject)=>{
var storageRef = firebase.storage().ref();
storageRef.child('uploads/photo.jpg').put(blob, {
contentType: 'image/jpeg'
}).then((snapshot)=>{
blob.close();
resolve(snapshot);
}).catch((error)=>{
reject(error);
});
});
}
按下按钮后,我运行以下代码:
this.uriToBlob(this.state.imageUri).then(function(blob) {
return this.uploadToFirebase(blob)
});
但是,我总是得到错误
[未处理的承诺拒绝:TypeError:未定义不是对象(评估'this.uploadToFirebase')]
我以前没有使用过 Firebase 存储或 blob,所以我非常感谢一些关于为什么这不起作用的见解。谢谢!
解决方案
问题出在此处:
this.uriToBlob(this.state.imageUri).then(function(blob) {
return this.uploadToFirebase(blob)
});
您没有使用箭头功能,因此“this”实际上不是您要查找的上下文(来自父范围的上下文)。
你应该这样做:
this.uriToBlob(this.state.imageUri).then((blob) => {
return this.uploadToFirebase(blob);
});
推荐阅读
- reactjs - 反应 js 中的 AWS polly(文本到语音)。无法获取 AWS 上下文以提供凭据
- firebase - 如何从 Firebase 身份验证更改电子邮件的电子邮件发件人姓名?
- angular - 回调按钮时角度删除查询参数
- javascript - 反应本机(博览会)网络视图错误 net::ERR_CACHE_MISS
- php - DiscriminatorMap 注解中的环境变量或函数
- laravel - Api Endpoint 中不存在 Authorizarion 标头 - Laravel
- javascript - 如何使最小填充图表js折线图
- angular - 从 Angular 8 应用程序向身份验证 API 端点发出请求会导致 CORS 错误,而来自 Postman 的相同请求可以完美运行文件
- laravel - .env 文件中的 MySQL 密码不起作用,但在 database.php 中工作正常(env() 缓存旧密码,config:clear 不会删除它)
- mysql-8.0 - MySQLSyntaxErrorException:升级时您的 SQL 语法有错误