【发布时间】:2017-11-24 23:31:48
【问题描述】:
我正在制作一个用户在 Firebase 存储上上传图片的应用。上传图片后,我想将图片的 URL 和其他详细信息上传到我自己的 API。如何获取用户刚刚上传的图片的 Uri。 This 教程教如何上传,但没有展示如何获取图像 URL。我尝试了所有教程,但没有一个显示我想要的东西。
【问题讨论】:
标签: android image firebase firebase-storage
我正在制作一个用户在 Firebase 存储上上传图片的应用。上传图片后,我想将图片的 URL 和其他详细信息上传到我自己的 API。如何获取用户刚刚上传的图片的 Uri。 This 教程教如何上传,但没有展示如何获取图像 URL。我尝试了所有教程,但没有一个显示我想要的东西。
【问题讨论】:
标签: android image firebase firebase-storage
根据the documentation,可以在.onSuccessListener中调用.getDownloadUrl获取图片URL。
这是文档中的示例:
// Get the data from an ImageView as bytes
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
UploadTask uploadTask = mountainsRef.putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
}
});
【讨论】:
您将在 onSuccess 回调中获得下载 URL。检查以下代码
public static void storeInFirebase(Context context, Uri uri, String type) {
StorageReference riversRef = null;
mStorageRef = FirebaseStorage.getInstance().getReference();
//to create a separate folder with all the pictures uploaded
riversRef = mStorageRef.child("pictures/" + "unique_value");
UploadTask uploadTask = riversRef.putFile(uri);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
DialogUtils.dismissProgressDialog();
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
downloadUrl = taskSnapshot.getDownloadUrl();
Log.d("downloadUrl", "" + downloadUrl);
}
});
}
【讨论】:
imagename.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
insertDataFirebase_with_image(UID, String.valueOf(uri));
insertData_with__Image(UID, String.valueOf(uri));
}
});
//这里的imagename是指向图片位置的StoragePreference //nad 插入数据是我用来将图像 URL 存储到我的实时数据库的函数
【讨论】: