【问题标题】:Firebase Storage image upload successful through Android App but how to get url?Firebase Storage图片通过Android App上传成功,但如何获取url?
【发布时间】:2019-06-29 13:21:00
【问题描述】:

我在我的 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 存储:

 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呢?

【问题讨论】:

  • 请注意,Cloud Storage for Firebase(最初称为 Firebase Storage)与 Cloud Firestore 不同。存储是一种文件存储解决方案,而后者是一个 NoSQL 数据库。您正在调用存储 API,因此请相应地标记(就像我一样)

标签: android firebase firebase-storage


【解决方案1】:

要获取 Cloud Storage 中文件的下载 URL,您可以在该文件的 StorageReference 上调用 getDownloadUrl()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
    }
});

有关更多信息,请参阅:

【讨论】:

    【解决方案2】:

    您可以在 Firebase 控制台的“文件”部分的顶部找到项目的 URL

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

    您可以创建一个 File 对象并尝试通过在 StorageReference 上调用 getFile 并将新的 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 ) {}
    

    您可以使用 StorageReference 上的 getDownloadUrl() 方法获取文件的 Url,这将为您提供指向文件位置的 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
        }
    });
    

    【讨论】:

    • 使用您需要的部分。谢谢
    猜你喜欢
    • 2020-04-18
    • 2021-09-10
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2018-11-19
    • 2021-01-24
    • 2017-12-12
    相关资源
    最近更新 更多