Как получить URL хранилища Firebase и сохранить их в Arraylist Android

У меня есть изображения в хранилище Firebase, как это, и изображения загружаются из консоли Firebase, поэтому я не могу сохранить URL-адреса раньше. Мне интересно, есть ли какой-либо метод, чтобы получить URL-адреса и сохранить их в ArrayList. поэтому я могу использовать позже из этого ArrayList. Я много искал, но не могу найти ни одного возможного ответа.

Пожалуйста: нет рекомендаций по переработке. Мне просто нужны URL-адреса всех изображений, которые находятся в хранилище Firebase.

1 ответ

Как вы упомянули, поскольку изображения загружаются из консоли Firebase, приложение не может узнать, когда загружается новое изображение, и рассчитать соответствующий URL-адрес.

Так что это должно быть сделано в серверной части, то есть на самой платформе Firebase. Облачные функции для Firebase специально сделаны для этого, см.: https://firebase.google.com/docs/functions/

Облачные функции для Firebase позволяют автоматически запускать внутренний код в ответ на события, вызванные функциями Firebase.

В вашем случае вы бы написали облачную функцию, которая будет запускаться при загрузке файла в облачное хранилище. Эта функция будет рассчитывать URL (через getSignedUrl() метод) и сохраните его в базе данных Firebase, например, Firestore. Таким образом, ваше Android-приложение может запросить базу данных, чтобы получить список URL-адресов (и поместить их в ArrayList).

Облачная функция будет выглядеть следующим образом:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

//See Note below and https://stackru.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 с учетными данными для выделенной учетной записи службы, см. этот раздел вопросов и ответов: /questions/47819528/firebase-funktsiya-poluchit-url-adres-zagruzki-posle-uspeshnogo-sohraneniya-izobrazheniya-v-oblachnoe-hranilische-firebase/47819551#47819551


Наконец, если вы новичок в облачных функциях, вы можете просмотреть эту страницу документа, в частности, раздел "Дальнейшие действия" внизу.

Другие вопросы по тегам