我在this之类的Firebase存储器上有图像,并且这些图像是从Firebase控制台上载的,因此以前无法存储URL。我想知道是否有任何方法来获取URL并将其保存在ArrayList中。所以我以后可以在那个ArrayList中使用。 我进行了很多搜索,但找不到任何可能的答案。
请:不建议使用回收站视图。我只需要Firebase存储中所有图像的URL。
答案 0 :(得分:1)
正如您所提到的,由于图像是从Firebase控制台上传的,因此对于该应用程序,尚无办法知道何时加载新图像并计算相应的URL。
因此,这必须在后端(即Firebase平台本身)上完成。为此,Firebase的云功能已特别完成,请参阅:https://firebase.google.com/docs/functions/
Firebase云功能可让您自动运行后端代码 响应由Firebase功能触发的事件。
在您的情况下,您将编写一个Cloud Function,该文件将在文件加载到Cloud Storage时触发。此函数将计算网址(通过getSignedUrl()
方法)并将其保存到Firebase数据库,例如消防站。这样,您的Android应用可以查询数据库以获取URL列表(并将它们放入ArrayList中)。
云功能将遵循以下原则:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
//See Note below and https://stackoverflow.com/a/50138883/3371862
import * as serviceAccount from 'yourServiceAccount.json';
const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG)
adminConfig.credential = admin.credential.cert(<any>serviceAccount)
admin.initializeApp(adminConfig);
const defaultStorage = admin.storage();
exports.saveSignedURL = functions.storage.object().onFinalize(object => {
const file = defaultStorage.bucket(object.bucket).file(object.name);
const options = {
action: 'read',
expires: '03-17-2025'
};
return file.getSignedUrl(options).then(results => {
const url = results[0];
return admin
.firestore()
.collection('images')
.add({ url: url });
});
});
请注意,为了使用getSignedUrl()
方法,您需要使用专用服务帐户的凭据来初始化Admin SDK,请参阅以下SO Q&A:https://stackoverflow.com/a/50138883/3371862
最后,如果您是Cloud Functions的新手,则可以查看这份文档page,尤其是底部的“下一步”部分。