Как кэшировать изображения хранилища Firebase для PWA на хостинге Firebase - PullRequest
1 голос
/ 09 мая 2019

Идея состоит в том, чтобы разрешить зарегистрированным пользователям загружать свои собственные изображения профиля и использовать эффективное кэширование для изображений профиля, действительных для всех посетителей (не только зарегистрированных).

У меня есть PWA, который размещен вне облака Googleно управляет своими пользователями через firebase и хранит изображения с помощью firebase-storage.Кажется хорошей идеей также использовать firebase-хостинг на настраиваемом поддомене, который должен использоваться как менеджер прокси / доступа и т. Д. Для доступа к firebase-хранилищу (которое, в свою очередь, может быть дополнительно кэшировано через Cloudflare - необязательно).

По сути, мы оказались (частный хостинг: на основном домене) и (хостинг firebase: на поддомене).Как мы можем управлять тем, кто вошел в главное приложение на поддомен, не передавая метаданные, которые могли бы повлиять на кэширование, которое мы стремимся получить от поддомен?

На этом этапе Я едва знаю, как firebase управляет своими сессиями .Будем очень благодарны за любые идеи!

PWA информируется о входе / выходе пользователя через события JS:

firebase.auth().onAuthStateChanged((user) => {
    if (user) {
        //user is logged in
    } else {
        //user is logged out
    }
}

Я проверил несколько вопросов здесь, таких как: Кэшизображения, полученные из Firebase Storage в приложении PWA Установка кэша для файлов в Firebase Storage Хранение Firebase downloadURL структура файла Как кэшировать загруженные изображения из хранилища Firebase

Чтобы загрузить изображение (с частного хостинга) в firebase-хранилище с помощью JS, мы можем использовать:

<progress value="0" max="100" id="uploader">0%</progress><br />
<input type="file" id="photo" />
<script>
var uploader = document.getElementById('uploader');
var fileButton = document.getElementById('photo');
fileButton.addEventListener('change', function(e) {
    var user = firebase.auth().currentUser;
    var ref = firebase.storage().ref();
    var file = e.target.files[0];
    var name = (user.uid+'/1');
    var metadata = {
        'contentType': file.type,
        'cacheControl': 'private, max-age=15552000'
    };
    var task = ref.child(name).put(file, metadata);
    task.on('state_changed', 
        function progress(snapshot) {
            var percentage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            uploader.value = percentage;
        },
        function error(err) {
            console.log(err);
        },
        function complete() {
            console.log('all done');
        }
    );
    task
    .then(snapshot => snapshot.ref.getDownloadURL())
    .then((url) => {
        console.log(url); //this "url" is to be saved on the profile for the authenticated user and used from within the firebase hosting
    })
    .catch(console.error);
});
</script>

В основном, когда изображение сохраняется в firebase-хранилище, мы можем сохранить URL-адрес"для профиля пользователя.Мы хотим использовать Firebase-хостинг для обработки сохранения в FireBase-хранилище (так как было бы здорово добавить обрезку и другие манипуляции с изображениями перед сохранением в FireBase-хранилище, поэтому я считаю, что мы должны иметь возможность обмениваться данными сеанса).Как только изображение будет сохранено в firebase-storage, я бы хотел реализовать кэширование через firebase-hosting.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...