Загрузка образа из Firebase Storage успешно осуществлена ​​через приложение для Android, но как получить URL? - PullRequest
0 голосов
/ 29 июня 2019

Я использовал эту библиотеку в своем приложении для Android

implementation 'com.google.firebase:firebase-core:17.0.0'
implementation 'com.google.firebase:firebase-firestore:20.0.0'
implementation 'com.google.firebase:firebase-storage:18.0.0'

И этот метод используется для загрузки моего изображения в Firebase Storage:

 StorageReference storageRef = mStorage.getReference();
 finalStorageReference mountainsRef = storageRef.child("myImgName");

 Uri file = Uri.fromFile(new File(myImgName));

UploadTask uploadTask = mountainsRef.putFile(file);

uploadTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle unsuccessful uploads
        progressDialog.dismiss();
        Log.e(TAG, "img Error :" + exception.getMessage());
        //Toast.makeText(MainActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        progressDialog.dismiss();
        //Log.e(TAG, "Task :" + taskSnapshot.getTask());

        //Log.e(TAG, "Class Store:" + taskSnapshot.getStorage().getDownloadUrl());
        Log.e(TAG,"metaData :"+taskSnapshot.getMetadata().getPath());

        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, etc.
        // ...
    }
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
        double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot
                .getTotalByteCount());
        progressDialog.setMessage("Uploaded " + (int) progress + "%");
    }
});

этот код отлично работает для меня, чтобы загрузить изображение. но как узнать URL-адрес местоположения изображения?

Ответы [ 2 ]

2 голосов
/ 29 июня 2019

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

mountainsRef.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        // Got the download URL for 'users/me/profile.png' in uri
        System.out.println(uri.toString());
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

Подробнее об этом см .:

0 голосов
/ 29 июня 2019

Вы можете найти URL вашего проекта в верхней части раздела «Файлы» хранилища в консоли Firebase

 FirebaseStorage storage = FirebaseStorage.getInstance();
 StorageReference storageRef = storage.getReferenceFromUrl("gs://example-firebase.appspot.com").child("android.jpg");

Вы можете создать объект File и попытаться загрузить нужный файл, вызвав getFile в StorageReference с новым объектом File, переданным в качестве параметра. Поскольку эта операция происходит асинхронно, вы можете добавить OnSuccessListener и OnFailureListener

 try {
        final File localFile = File.createTempFile("images", "jpg");
        storageRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                Bitmap bitmap = BitmapFactory.decodeFile(localFile.getAbsolutePath());
                mImageView.setImageBitmap(bitmap);

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
            }
        });
    } catch (IOException e ) {}

Вы можете получить URL файла, используя метод getDownloadUrl () в StorageReference, который даст вам Uri, указывающий на местоположение файла.

storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        Log.e("Image +", "uri: " + uri.toString());
        //Handle whatever you're going to do with the URL here
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...