【发布时间】:2018-05-30 07:04:15
【问题描述】:
我正在观看有关 Firebase 存储的旧教程。来自UploadTask.TaskSnapshot 的getDownloadUrl() 方法已不存在,而documentation 我也不清楚。
到目前为止,我实施的是上传过程,我可以确认它可以正常工作,但是获取 URL 很痛苦,我无法按照他们解释的方式进行操作,因为:
1) 创建Task<Uri> urlTask = uploadTask.add[...]() 会导致IDE 出现以下错误:
我不明白,因为它在文档中指定。
2) 使用reference.getDownloadUrl() 会在查看上传图片的详细信息时显示与控制台上显示的不同的 URL。控制台显示的下载地址是
同时显示日志
com.google.android.gms.tasks.xxx@xxxxxxx
我现在的完整代码:
if (requestCode == RC_PHOTO_PICKER) {
if (data != null) {
Toast.makeText(MainActivity.this, "Uploading...", Toast.LENGTH_SHORT).show();
Uri file = data.getData();
final StorageReference reference = mPhotoStorageReference.child(file.getLastPathSegment());
UploadTask upload = reference.putFile(file);
upload.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Image could not be uploaded: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}).addOnCompleteListener(this, new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
ChatroomMessage message = new ChatroomMessage(null, mUsername, reference.getDownloadUrl().toString()); // <- com.google.android.gms.tasks.xxx@xxxxxxx
mMessagesDatabaseReference.push().setValue(message);
Toast.makeText(MainActivity.this, "Image uploaded!", Toast.LENGTH_SHORT).show();
}
});
}
}
我的应用已经实现了 Firebase UI 来处理登录操作,并且规则是
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
【问题讨论】:
标签: java android firebase firebase-storage