Javascript 从firebase存储上的图像动态下载URL以供显示
我有一大堆已经上传到firebase存储上的图像,我想动态检索这些图像并显示在我的应用程序屏幕中。这就是我迄今为止所做的尝试,但没有成功: 我尝试了API引用中的listFilesAndDirectories函数,该函数导致以下错误:Javascript 从firebase存储上的图像动态下载URL以供显示,javascript,firebase,react-native,firebase-storage,Javascript,Firebase,React Native,Firebase Storage,我有一大堆已经上传到firebase存储上的图像,我想动态检索这些图像并显示在我的应用程序屏幕中。这就是我迄今为止所做的尝试,但没有成功: 我尝试了API引用中的listFilesAndDirectories函数,该函数导致以下错误: Possible Unhandled Promise Rejection (id: 1): Error: [storage/object-not-found] No object exists at the desired reference. Native
Possible Unhandled Promise Rejection (id: 1):
Error: [storage/object-not-found] No object exists at the desired reference.
NativeFirebaseError: [storage/object-not-found] No object exists at the desired reference.
上面的函数打印日志语句“Finished listing”,但不显示图像
我还编写了这个函数,但它不起作用,它在3分钟后输出一个maxDownloadRetryError
function fetchImage() {
reference.getDownloadURL().then(
function(url) {
console.log(url);
},
function(error) {
console.log(error);
},
);
}
fetchImage();
错误消息告诉您正在使用的引用位置没有对象。不能将
getDownloadURL()
与非actul file对象的路径一起使用。不能在前缀(文件夹)上使用它
如果您试图为列出的每个对象获取一个下载URL,并且该对象带有列表文件和目录
,则必须在找到的每个文件对象上调用getDownloadURL()
(而不只是对整个前缀调用一次)
更像这样:
function listFilesAndDirectories(reference, pageToken) {
return reference.list({pageToken}).then(result => {
result.items.forEach(ref => {
// call getDownloadURL on every object reference
ref.getDownloadURL().then(url => {
console.log(`${fullPath}: ${url}`)
})
});
if (result.nextPageToken) {
return listFilesAndDirectories(reference, result.nextPageToken);
}
return Promise.resolve();
});
}
图像URL被记录到控制台,我面临提取URL并将其作为URI放置在图像中我尝试了模板文字,我尝试调用函数并使用点符号提取URL,但在函数范围外无法访问URL,这听起来像是一个完全不同的问题-请将其发布到新的问题来解释你现在在处理什么。
function listFilesAndDirectories(reference, pageToken) {
return reference.list({pageToken}).then(result => {
result.items.forEach(ref => {
// call getDownloadURL on every object reference
ref.getDownloadURL().then(url => {
console.log(`${fullPath}: ${url}`)
})
});
if (result.nextPageToken) {
return listFilesAndDirectories(reference, result.nextPageToken);
}
return Promise.resolve();
});
}