在我的新android firebase项目中,我使用了com.google.firebase:firebase-storage:16.0.1
库。
我收到以下错误:
我打开了另一个项目,该项目包含了处理该项目的库firebase-storage:15.0.2
和taskSnapshot.getDownloadUrl();
。但在使用最新的依赖库后,它无法正常工作。
现在,我该如何获取文件URL?
以任何方式获取文件下载链接?
答案 0 :(得分:25)
我找到了解决问题的方法。
Firebase Google Documentation:
//add file on Firebase and got Download Link
filePath.putFile(imageUri).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();
}
return filePath.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()){
Uri downUri = task.getResult();
Log.d(TAG, "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());
}
});
}
});
答案 1 :(得分:4)
该方法已在版本16.0.1上弃用(检查Firebase release notes),因此您必须使用
StorageReference.getDownloadUrl()
如果您想在上传文件后获取它们,则必须检查其文档here。它已经更新。
答案 2 :(得分:1)
这就是我在Kotlin android中获得下载链接的方式。
ref.putFile(filePath!!)
.addOnSuccessListener {
val result = it.metadata!!.reference!!.downloadUrl;
result.addOnSuccessListener {
val imageLink = it.toString()
}
}
答案 3 :(得分:0)
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();
}
});
}
});
答案 4 :(得分:0)
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
// ...
}
}
});
答案 5 :(得分:0)
在这种情况下,最好继续使用addOnSuccessListener
,但要直接使用getDownloadUrl
,也需要添加一个监听器。
现在方法像这样在taskSnapshot.getMetadata().getReference()
内部
filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// User uri here
}
});
}
});