Java 在Android Firebase存储中上传文件后,如何获取文件下载Url?getDownloadUrl()不工作
在我的新安卓firebase项目中,我使用了Java 在Android Firebase存储中上传文件后,如何获取文件下载Url?getDownloadUrl()不工作,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,在我的新安卓firebase项目中,我使用了com.google.firebase:firebase存储:16.0.1library 我得到以下错误: 我打开了另一个包含库firebase存储的项目:15.0.2和taskSnapshot.getDownloadUrl()在该项目中起作用的代码。但在使用了最新的依赖项库之后,它就不起作用了 现在,如何获取文件URL 有没有办法获得文件下载链接?该方法在16.0.1版(检查)中已被弃用,因此您必须使用 如果你想在上传文件后得到它们,那么你必须检
com.google.firebase:firebase存储:16.0.1
library
我得到以下错误:
我打开了另一个包含库firebase存储的项目:15.0.2
和taskSnapshot.getDownloadUrl()代码>在该项目中起作用的代码。但在使用了最新的依赖项库之后,它就不起作用了
现在,如何获取文件URL
有没有办法获得文件下载链接?该方法在16.0.1版(检查)中已被弃用,因此您必须使用
如果你想在上传文件后得到它们,那么你必须检查它们的文档。它已经更新。我已经找到了两个解决问题的方法
:
//在Firebase上添加文件并获得下载链接
filePath.putFile(imageUri).continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
返回filePath.getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Uri downUri=task.getResult();
d(标记“onComplete:Url:+downUri.toString());
}
}
});
另一个解决方案强>
它比google Firebase文档更简单、更小巧,我将使用它:
filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.d(TAG, "onSuccess: uri= "+ uri.toString());
}
});
}
});
filePath.putFile(imageUri).addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
filePath.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
Log.d(标记“onSuccess:uri=“+uri.toString());
}
});
}
});
taskSnapshot.getDownloadUrl()已被弃用,因此我建议您在addOnSuccessListener()方法中,使用storageReference并调用getDownloadUrl()方法来获取文件的url,并可以对其执行任何操作。希望能有帮助
mUploadTask = storageRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// get the image Url of the file uploaded
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// getting image uri and converting into string
Uri downloadUrl = uri;
fileUrl = downloadUrl.toString();
}
});
}
});
mUploadTask=storageRef.putFile(file).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//获取上载文件的图像Url
storageRef.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//获取图像uri并转换为字符串
Uri downloadUrl=Uri;
fileUrl=downloadUrl.toString();
}
});
}
});
这就是我在kotlin android中获得下载链接的方式
ref.putFile(filePath!!)
.addOnSuccessListener {
val result = it.metadata!!.reference!!.downloadUrl;
result.addOnSuccessListener {
val imageLink = it.toString()
}
}
Firebase更新了他们的方法,因此请更新您自己,请使用此方法:
这是一条让你觉得烦人的基本路线,非常简单,只需以这种方式获取下载路径即可
StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
UploadTask uploadTask = ref.putFile(filePath);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot,
Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
///here is your image url enjoy this
Toast.makeText(CloudStorageActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
}
} else {
// Handle failures
// ...
}
}
});
storagereferef=StorageReference.child(“images/”+UUID.randomuid().toString());
UploadTask UploadTask=ref.putFile(文件路径);
Task urlTask=uploadTask.continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
//继续执行任务以获取下载URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Uri downloadUri=task.getResult();
///这是你的图片网址,请欣赏
Toast.makeText(CloudStorageActivity.this,“上载”,Toast.LENGTH_SHORT.show();
}
}否则{
//处理故障
// ...
}
}
});
在这种情况下,最好在使用时继续使用addOnSuccessListener
,但不要直接使用getDownloadUrl
,还需要添加一个侦听器
现在该方法在taskSnapshot.getMetadata().getReference()中,如下所示
filePath.putFile(imageUri).addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//这里的用户uri
}
});
}
});
谢谢你的信息,我没有找到这个。我读了文档,这帮了我的忙。嘿,伙计,我真的很想谢谢你,因为我被困了好几天,就是找不到解决办法。我试着在这里提问,但什么都没用。砰的一声,我找到了你的答案,现在它开始工作了。我很高兴我能帮上忙。如果答案有帮助,请投票。快乐编码!
StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
UploadTask uploadTask = ref.putFile(filePath);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot,
Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
///here is your image url enjoy this
Toast.makeText(CloudStorageActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
}
} else {
// Handle failures
// ...
}
}
});