Firebase存储getDownloadUrl()"不是函数"

9
let storage = firebase.storage();
let storageRef = storage.ref("EnglishVideos/" + movieTitle + "/" + movieTitle + "_full.mp4");
    console.log(storageRef); // looks OK, no error messages

上述代码可行,从Firebase Storage返回的对象具有正确的位置,没有错误信息。
但是getDownloadUrl()无法正常工作:
let myURL = storageRef.getDownloadUrl();
console.log(myURL); // TypeError: storageRef.getDownloadUrl is not a function

错误是 TypeError: storageRef.getDownloadUrl is not a function。看起来像是原型链的错误。我正在使用AngularJS,也许我没有将必要的依赖注入到我的控制器中?我已经在控制器中注入了 $firebaseStorage,但没有帮助。我从该控制器对Firebase实时数据库的调用正常工作。
3个回答

13

应该使用 getDownloadURL 而不是 getDownloadUrl,注意大小写。我的工作代码如下:

var storageRef = firebase.storage().ref("EnglishVideos/" + movieTitle + "/" + movieTitle + "_full.mp4");
  storageRef.getDownloadURL().then(function(url) {
    console.log(url);
  });

官方”版本是

var storageRef = firebase.storage.ref("folderName/file.jpg");
storageRef.getDownloadURL().then(function(url) {
  console.log(url);
});

请注意,在 storage 之后我需要一个(),即storage()

1
这对我也有效,谢谢。但是,如果我在构造函数中初始化存储(--> constructor(public storage: AngularFireStorage) { }),为什么我不能在this.storage.getDownloadURL()之后链接.then(),但在this.storage.upload(x, y).then()之后不是问题? - choli
我已经在下面为你的“then(...)”问题编写了解决方案。 - Ryan Loggerythm

1

Thomas David Kehoe的解决方案让我接近成功。

但我仍然遇到了以下错误:

ERROR TypeError: storageRef.getDownloadURL(...).then不是一个函数

这是我的解决方案:

import { Observable } from 'rxjs';

然后在我的函数内部:

var storageRef = this.storage.ref('myFolder/myFile.jpg');
storageRef.getDownloadURL().toPromise().then(function (url) {
    console.log(url);
});

0
在我的情况下,我试图在上传任务上调用getDownloadURL();
var upload=storage.child(`Testing/abc.png`).put(chosenFile);
//.....
//.....
upload.getDownloadURL();
 

通过以下方式解决了它

  var ImgUploadRef=storage.child(`Testing/abc.png`);
  var upload = ImgUploadRef.put(chosenFile);
   //....
   //....
   ImgUploadRef.getDownloadURL();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接