我将两张“用户选择的”图片上传到firebase存储区,并将它们的URL保存到firestore,但是URL保存指向的只是其中一张图片,尽管它们看起来并不相同。有一个类似的问题,但是关于swift的,它没有回答我的问题,这里是这个问题的URL。从多个文件上传firebase存储获取下载url
我试着用ref.getDownloadURL()获取下载链接,但这给出了错误的URL,TaskSnapshot.getDownloadURL()不再起作用了。我试着阅读了很多答案,但没有任何帮助。大多数已经过时的TaskSnapshot.getDownloadURL()方法。
if (profileImageUri != null) {
//upload first image
profileImageRef.putFile(profileImageUri).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 profileImageRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
profileImageUrl = String.valueOf(downloadUri);
saveUserInfo(); // method to save the URLs along with other info
} else {
Toast.makeText(EditProfile.this, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
btSaveInfo.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
});
}
if (coverImageUri != null) {
// Upload second image
profileImageRef.putFile(coverImageUri).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 profileImageRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadCUri = task.getResult();
coverImageUrl = String.valueOf(downloadCUri);
Toast.makeText(getApplicationContext(), "Cover Picture Uploaded", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(EditProfile.this, "Cover picture upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
这两个映像被上传,我可以在我的firebase控制台中看到它们,但是保存在firestore中的URL都加载了相同的映像,虽然它们不一样,
>
https://firebasestorage.googleapis.com/v0/b/sefnetapp-39b37.appspot.com/o/profilepics%2f1561103180500.jpg?alt=介质&标记=8dd5ee93-9bbc-46ee-89b9-Fb5ae5b36128
https://firebasestorage.googleapis.com/v0/b/sefnetapp-39b37.appspot.com/o/profilepics%2f1561103180500.jpg?alt=介质&标记=c153c59b-c6b3-428b-a845-3db3b19a38e3
我如何获得两个URL来加载我上传的两张图片,而不仅仅是一张
谢谢你的帮助,非常感谢。
我刚刚意识到我没有保存我的信息后上传的封面图像,我添加了saveInfo方法在我的onComplete的封面图像上传方法,它现在工作良好。
final StorageReference profileImageRef = FirebaseStorage.getInstance()
.getReference(SefnetContract.PROFILE_PICS_REF + System.currentTimeMillis() + ".jpg");
// Upload profile picture
if (profileImageUri != null) {
progressBar.setVisibility(View.VISIBLE);
profileImageRef.putFile(profileImageUri).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 profileImageRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
profileImageUrl = String.valueOf(downloadUri);
saveUserInfo();
} else {
Toast.makeText(EditProfile.this, "upload failed: "
+ task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
progressBar.setVisibility(View.GONE);
}
});
}
if (coverImageUri != null) {
// Upload cover picture
progressBar.setVisibility(View.VISIBLE);
profileImageRef.putFile(coverImageUri).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 profileImageRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()) {
Uri downloadCUri = task.getResult();
coverImageUrl = String.valueOf(downloadCUri);
saveUserInfo();
Toast.makeText(getApplicationContext(), "Cover Picture Uploaded", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(EditProfile.this, "Cover picture upload failed: "
+ task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
我还是觉得可以用更好的方法来做,所以如果你知道比这更好的方法,请分享。我想要一个方法,在其中我可以停止用户初始化上传方法太多次,通过单击按钮重复,谢谢
我试图获得这样的下载网址,但它没有得到正确的网址。我是Firebase的初学者,怎么做呢?
我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储,以便在需要时使用它。 现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:或,每个选项分别需要或。 我怎么能把我的,并从它获得一个或用于上传? -- 或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的? 无论
如何获得下载URL? 我有点糊涂了。现在,我被困在修改后的功能更新。下面是我对管理的初始化。
我在SQLite数据库中有一个图像作为BLOB类型,我想将该图像上传到firebase存储中,获取图像的下载URL和尺寸,并将它们添加到Firebase实时数据库中。我已使用 bucket.upload 从本地驱动器成功上传了图像,但我不知道如何上传 blob。 我在服务器端(NodeJS)使用admin-sdk,有一个“上传”功能,但那是在客户端sdk中。
我试图上传一个图像文件,我得到了使用Imagepicker。 但上面的代码返回以下错误 VERBOSE-2:ui\u dart\u状态。cc(186)]未处理的异常:MissingPluginException(未找到方法任务的实现#通道插件上的startPutFile.flatter.io/firebase_存储)#0 MethodChannel_invokeMethod包:flatter/..
我有一个问题与我的代码,我必须上传图像到Firebase存储,我需要的图像来自画廊和相机,从画廊的图像是好的,但来自相机的图像给问题,图像加载在ImageView和被发送到数据库是黑色的。有人知道如何解决这个问题吗,或者你知道任何其他加载图像的方法吗? 来自画廊 从相机