Firebase上传图片成功后snapshot.downloadURL为undefined问题求助
解决Firebase Storage上传后snapshot.downloadURL为undefined的问题
我之前也碰到过一模一样的情况!问题出在Firebase Storage的API更新上——旧版本里直接通过snapshot.downloadURL拿下载链接的方式早就被废弃了,现在得用异步方法来获取。
你看,虽然图片成功上传到了存储后台,但当前版本的Firebase不再把下载链接直接挂在snapshot对象上,而是需要通过存储引用调用getDownloadURL()方法来获取,这个方法返回一个Promise,所以得用.then()来处理结果。
给你修改好的代码:
storage.$putString(b64, 'data_url', {contentType:'image/jpg'}).$complete(function(snapshot) { console.log(snapshot); // 通过snapshot.ref获取存储引用,再调用getDownloadURL()拿链接 snapshot.ref.getDownloadURL().then(function(downloadURL) { item.avatarUrl = downloadURL; agents.$add(item).then(function(ref) { // 这里可以加一些上传完成后的逻辑,比如提示用户 }); }).catch(function(error) { // 别忘了处理可能的错误,比如权限问题导致拿不到链接 console.error('获取图片下载链接失败:', error); }); });
为什么会这样?
Firebase团队后续更新中,把下载链接的获取改成了异步操作,因为生成带签名的下载链接(如果是私有文件的话)需要额外的服务器端处理,用Promise的方式更符合异步操作的规范,也能更好地处理错误情况。
另外提醒一下,如果你用的是比较新的AngularFire版本,确认下snapshot.ref是存在的——正常情况下上传成功的snapshot都会包含这个存储引用,所以不用太担心。
内容的提问来源于stack exchange,提问作者Xsmael
相关产品推荐
相关产品推荐

