如何获取Firebase存储的URL并将其保存在Arraylist Android中

时间:2018-11-28 20:17:34

标签: android firebase arraylist firebase-storage geturl

我在this之类的Firebase存储器上有图像,并且这些图像是从Firebase控制台上载的,因此以前无法存储URL。我想知道是否有任何方法来获取URL并将其保存在ArrayList中。所以我以后可以在那个ArrayList中使用。 我进行了很多搜索,但找不到任何可能的答案。

请:不建议使用回收站视图。我只需要Firebase存储中所有图像的URL。

1 个答案:

答案 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,尤其是底部的“下一步”部分。