Невозможно получить файл из хранилища firebase - PullRequest
0 голосов
/ 14 июля 2020

Я не могу получить загруженный файл изображения из хранилища firebase, потому что база данных хранит URL-адрес в форме непонятного URL-адреса publi c, и я не могу понять всю жизнь, что не так с моим кодом . Пожалуйста, помогите.

    @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == GALLERY_PICK && resultCode == RESULT_OK){

        Uri imageUri = data.getData();

        CropImage.activity(imageUri)
                .setAspectRatio(1,1)
                .start(this);

        //Toast.makeText(SettingsActivity.this, imageUri, Toast.LENGTH_LONG).show();

    }

    if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){

        CropImage.ActivityResult result = CropImage.getActivityResult(data);

        if(resultCode == RESULT_OK){

            mProgressDialog = new ProgressDialog(SettingsActivity.this);
            mProgressDialog.setTitle("Uploading");
            mProgressDialog.setMessage("Please Wait While The Image Is Being Uploaded");
            mProgressDialog.setCanceledOnTouchOutside(false);
            mProgressDialog.show();

            Uri resultUri = result.getUri();
            String current_user_id = mCurrentUser.getUid();
            StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + ".jpg");
            filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    if(task.isSuccessful()){

                        final String download_url = task.getResult().getMetadata().getReference().getDownloadUrl().toString();
                        mUserDatabase.child("image").setValue(download_url).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                if(task.isSuccessful()){

                                    mProgressDialog.dismiss();
                                    Toast.makeText(SettingsActivity.this, "Uploaded Successfully", Toast.LENGTH_LONG).show();

                                }

                            }
                        });

                    } else {

                        Toast.makeText(SettingsActivity.this, "Error", Toast.LENGTH_LONG).show();
                        mProgressDialog.dismiss();

                    }

                }
            });

        } else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){

            Exception error = result.getError();

        }

    }

}

Я застрял на этом последние 5 дней, любая помощь приветствуется

1 Ответ

0 голосов
/ 14 июля 2020

Сначала вы можете преобразовать свое изображение в поток растрового изображения, а затем вы можете загрузить его в хранилище firebase и также легко получить ссылку для загрузки. Вы можете сделать что-то вроде этого ниже:

StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + ".jpg");

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,40,baos);
byte[] byt = baos.toByteArray();

UploadTask uploadTask = filepath.putBytes(byt);

 uploadTask.addOnFailureListener(new OnFailureListener() {

                        @Override
                        public void onFailure(@NonNull Exception e) {

                            TastyToast.makeText(getApplicationContext(),"Error:"+e.getMessage(),TastyToast.LENGTH_LONG,
                                     TastyToast.ERROR).show();

                        }
                    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            if(taskSnapshot.getMetadata() != null){

                                Task<Uri> result = taskSnapshot.getStorage().getDownloadUrl();

                                result.addOnSuccessListener(new OnSuccessListener<Uri>() {

                                    @Override
                                    public void onSuccess(Uri uri) {

                                         downloadUrl = Uri.parse(uri.toString());

                                       // In downloadUri variable you will get your 
                                           image downloadable link
                                    }
                                });
                            }

                        }
                    }); 

СПАСИБО

...