通过Android应用程序成功上传Firebase存储图像,但如何获取url?

通过Android应用程序成功上传Firebase存储图像,但如何获取url?,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我在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 sto

我在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 + "%");
    }
});
storagereferef=mStorage.getReference();
finalStorageReference Mountains ref=存储参考子项(“myImgName”);
urifile=Uri.fromFile(新文件(myImgName));
UploadTask UploadTask=mountainsRef.putFile(文件);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理不成功的上传
progressDialog.disclose();
Log.e(标记“img Error:+exception.getMessage());
//Toast.makeText(MainActivity.this,“Failed”+e.getMessage(),Toast.LENGTH\u SHORT.show();
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
progressDialog.disclose();
//Log.e(标记“Task:+taskSnapshot.getTask());
//Log.e(标记,“类存储:”+taskSnapshot.getStorage().getDownloadUrl());
Log.e(标记,“元数据:+taskSnapshot.getMetadata().getPath());
//taskSnapshot.getMetadata()包含文件元数据,如大小、内容类型等。
// ...
}
}).addOnProgressListener(新的OnProgressListener(){
@凌驾
public void onProgress(UploadTask.TaskSnapshot TaskSnapshot){
双进度=(100.0*taskSnapshot.GetByTestTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage(“上传”+(int)进度+“%”;
}
});

这段代码非常适合我上传图片。但是如何知道图像位置url呢?

要获取云存储中文件的下载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
    }
});
mountainsRef.getStorage().getDownloadUrl().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//已在uri中获取“users/me/profile.png”的下载URL
System.out.println(uri.toString());
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
}
});
有关详细信息,请参阅:

  • 样本在

要获取云存储中某个文件的下载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
    }
});
mountainsRef.getStorage().getDownloadUrl().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//已在uri中获取“users/me/profile.png”的下载URL
System.out.println(uri.toString());
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
}
});
有关详细信息,请参阅:

  • 样本在

您可以在Firebase控制台中存储的文件部分顶部找到项目的URL

 FirebaseStorage storage = FirebaseStorage.getInstance();
 StorageReference storageRef = storage.getReferenceFromUrl("gs://example-firebase.appspot.com").child("android.jpg");
通过在StorageReference上调用getFile并将新文件对象作为参数传递,可以创建文件对象并尝试加载所需文件。由于此操作是异步进行的,因此可以添加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 ) {}
试试看{
最终文件localFile=File.createTempFile(“图像”、“jpg”);
storageRef.getFile(localFile).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
位图位图=BitmapFactory.decodeFile(localFile.getAbsolutePath());
设置图像位图(位图);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
}
});
}捕获(IOE){}
您可以在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
    }
});
storageRef.getDownloadUrl().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
Log.e(“Image+”,“uri:+uri.toString());
//处理您将要对此处的URL执行的任何操作
}
});

您可以在Firebase控制台中存储的文件部分顶部找到项目的URL

 FirebaseStorage storage = FirebaseStorage.getInstance();
 StorageReference storageRef = storage.getReferenceFromUrl("gs://example-firebase.appspot.com").child("android.jpg");
通过在StorageReference上调用getFile并将新文件对象作为参数传递,可以创建文件对象并尝试加载所需文件。由于此操作是异步进行的,因此可以添加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 ) {}
试试看{
最终文件localFile=File.createTempFile(“图像”、“jpg”);
storageRef.getFile(localFile).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
位图位图=BitmapFactory.decodeFile(localFile.getAbsolutePath());
设置图像位图(位图);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
}
});
}捕获(IOE){}
您可以在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
    }
});
storageRef.getDownloadUrl().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(Ur)