После загрузки файла в Android Firebase Storage, как получить файл загрузки Url? getDownloadUrl() не работает
В моем новом проекте Android Firebase я использовал библиотеку com.google.firebase:firebase-storage:16.0.1
.
Я получаю следующую ошибку:
Я открыл другой проект, в котором были библиотеки firebase-storage:15.0.2
и taskSnapshot.getDownloadUrl();
, которые работали над этим проектом. но после использования последней библиотеки зависимостей она не работает.
Теперь, как я могу получить URL файла?
Есть ли способ получить ссылку на скачивание файла?
Ответы
Ответ 1
Я нашел 2 решения моей проблемы.
Firebase Документация Google:
//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());
}
});
}
});
Ответ 2
Этот метод устарел в версии 16.0.1 (отметьте заметки о выпуске Firebase), поэтому вам нужно использовать
StorageReference.getDownloadUrl()
Если вы хотите получить их после загрузки файла, вы должны проверить их документацию здесь. Он уже обновлен.
Ответ 3
вот как я получаю ссылку для скачивания в Kotlin Android.
ref.putFile(filePath!!)
.addOnSuccessListener {
val result = it.metadata!!.reference!!.downloadUrl;
result.addOnSuccessListener {
val imageLink = it.toString()
}
}
Ответ 4
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();
}
});
}
});
Ответ 5
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
// ...
}
}
});