火力地堡下载图片(不调用存储)

问题描述:

Firebase's documentation盖下载的图像,如果你调用存储和getDownloadURL,我有这个工作正常(直接从文档)火力地堡下载图片(不调用存储)

storageRef.child('images/stars.jpg').getDownloadURL().then(function(url) { 
    // `url` is the download URL for 'images/stars.jpg' 

    // This can be downloaded directly: 
    var xhr = new XMLHttpRequest(); 
    xhr.responseType = 'blob'; 
    xhr.onload = function(event) { 
    var blob = xhr.response; 
    }; 
    xhr.open('GET', url); 
    xhr.send(); 

    // Or inserted into an <img> element: 
    var img = document.getElementById('myimg'); 
    img.src = url; 
}).catch(function(error) { 
    // Handle any errors 
}); 

然而,我已经有一个网址,并且想要下载图片而不需要调用firebase存储。这是我的尝试:

var url = "https://firebasestorage.googleapis.com/v0/b/somerandombucketname..." 
console.log(url); 
// This can be downloaded directly: 
var xhr = new XMLHttpRequest(); 
xhr.responseType = 'blob'; 
xhr.onload = function(event) { 
    var blob = xhr.response; 
}; 
xhr.open('GET', url); 
xhr.send(); 

但是,没有文件被下载,并且在浏览器的开发工具中没有显示错误。

注:我知道URL是正确的,因为如果我把URL直接放到我的浏览器搜索栏中,我可以访问该文件并下载它。

有谁知道如何使用您已有的下载URL下载图片(不需要像在文档中那样调用Firebase存储)?

+0

如果你看看浏览器的开发工具,它是否显示一些错误? –

+0

@RaxWeber浏览器的开发工具中没有显示任何错误 – Rbar

这结束了对我的工作:

var url = "https://firebasestorage.googleapis.com/v0/b/somerandombucketname..." 
var filename = url.substring(url.lastIndexOf("/") + 1).split("?")[0]; 
var xhr = new XMLHttpRequest(); 
xhr.responseType = 'blob'; 
xhr.onload = function() { 
    var a = document.createElement('a'); 
    a.href = window.URL.createObjectURL(xhr.response); 
    a.download = "fileDownloaded.filetype"; // Name the file anything you'd like. 
    a.style.display = 'none'; 
    document.body.appendChild(a); 
    a.click(); 
}; 
xhr.open('GET', url); 
xhr.send(); 

这实质上创建一个a href给我的网址,然后点击a href编程收到xhr响应时。

目前还不清楚为什么第一种方法不能很好地工作,但希望这可以帮助那些面临同样问题的人。