Как реализовать загрузку сделанного снимка в firebase? Android java
Нужно реализовать приложение. Вот суть:
-пользователь регистрируется ( auth.createUserWithEmailAndPassword(mailText.getText().toString(), passText.getText().toString()))
-при регистрации у пользователя создаётся личная папка.
-В эту папку он потом может загружает изображения, и потом может посмотреть эти изображения.
-Он может просматривать содержимое папок других пользователей
Так вот, замкнулся на загрузке сделанного изображения в Firebase
Сейчас написано: Регистрация и авторизация пользователя, добавление данных о пользователях в базу(имя, телефон) Создание снимка и запись в ImageView
Подскажите как сделанный снимок загрузить в firebase. И дайте пару подсказок по дальнейшим действиям. Прошу вас, для меня это важно...
Ответы (1 шт):
Используйте облачное хранилище Firebase Storage (документация с официального сайта). Для этого Вам нужно будет начать работу с хранилищем через консоль Firebase и настроить правила доступа.
Чтобы загрузить файл в облачное хранилище, Вы сначала создаете ссылку на путь к хранилищу (нужно будет импортировать implementation 'com.google.firebase:firebase-storage').
StorageReference storageRef = storage.getReference();
Затем Вам нужно своё изображение преобразовать в байтовый массив. Если у Вас изображение в ImageView imageView, то это можно сделать так:
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
В итоге Вы получаете массив data, который можно записать в Firebase Storage.
UploadTask uploadTask = storageRef.Child("переменная с названием папки текущего пользователя").putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// если произошла ошибка
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// всё хорошо
//данные можно получить из taskSnapshot.getMetadata() (метадата: размер файла, тип и т.д.)
}
});
Готово - изображение загружено в хранилище в папку пользователя.
Дальше Вы можете читать свои файлы из хранилища. Несколько способов описаны тут (в зависимости от того, в каком формате Вы хотите получить результат).