Загрузить изображение с камеры или галереи в FirebaseStorage - PullRequest
1 голос
/ 30 сентября 2019

У меня есть следующий код для отображения изображения внутри ImageView после того, как я выбрал из галереи / сделал снимок:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == GALLERY) {
        if (data != null) {
            Uri contentURI = data.getData();
            try {
                FixBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
                ShowSelectedImage.setImageBitmap(FixBitmap);

            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(ProfileActivity.this, "Failed!", Toast.LENGTH_SHORT).show();
            }
        }

    } else if (requestCode == CAMERA) {
        FixBitmap = (Bitmap) data.getExtras().get("data");
        ShowSelectedImage.setImageBitmap(FixBitmap);
    }
}

Теперь мне хотелось, чтобы это изображение было сохранено в моем FirebaseStorageпод uid текущего пользователя.

Итак, я знаю, что должен использовать что-то как:

String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();

Однако, как я могу сделать эту загрузку внутри своего хранилища? Моя конечная цель заключается в том, чтобы после входа в систему пользователь автоматически отображал изображение профиля из хранилища, а если изображение отсутствует или пользователь сделал новое изображение, он обновит изображение в хранилище.

У меня былопроблемы также с типом, так как putBytes требуется BytesArray и у меня были Bitmap или около того

Спасибо.

1 Ответ

1 голос
/ 30 сентября 2019

Следующий код поможет вам сохранить изображение в папке images с идентификатором пользователя текущего пользователя. У вас есть местоположение изображения, поэтому Firebase будет выбирать изображение из хранилища.

uploadImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(contentURI != null) {

            StorageReference childRef = storageRef.child("/images/"+uid+".jpg");

            //uploading the image
            UploadTask uploadTask = childRef.putFile(contentURI);
            uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_SHORT).show();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(MainActivity.this, "Upload Failed -> " + e, Toast.LENGTH_SHORT).show();
                }
            });
        }
        else {
            Toast.makeText(MainActivity.this, "Select an image", Toast.LENGTH_SHORT).show();
        }
    }
});

Объявить переменную:

StorageReference storageRef;

и в onCreateView:

storageRef = storage.getReference();

Сделать его публично объявленнымили он снова выдаст ошибку

...