【问题标题】:Upload image from camera or gallery to FirebaseStorage将图像从相机或图库上传到 FirebaseStorage
【发布时间】:2020-01-29 16:40:21
【问题描述】:

我有以下代码,以便在我从图库中选择/拍照后在ImageView 中显示图像:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == GALLERY) {
        if (data != null) {
            Uri contentURI = data.getData();
            try {
                FixBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
                ShowSelectedImage.setImageBitmap(FixBitmap);

            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(ProfileActivity.this, "Failed!", Toast.LENGTH_SHORT).show();
            }
        }

    } else if (requestCode == CAMERA) {
        FixBitmap = (Bitmap) data.getExtras().get("data");
        ShowSelectedImage.setImageBitmap(FixBitmap);
    }
}

现在,我希望将此图像保存在我的 FirebaseStorage 中,位于当前用户的 uid 下。

所以我知道我应该使用以下内容:

String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();

但是,如何在我的存储中进行此上传?我的最终目标是,一旦用户登录,它将自动显示存储中的个人资料图片,如果没有图片或用户拍摄了新照片,它将更新存储中的照片。

我的类型也有问题,因为putBytes 需要BytesArray,而我得到的结果是Bitmap 左右。

谢谢。

【问题讨论】:

    标签: android firebase-authentication firebase-storage


    【解决方案1】:

    以下代码将帮助您使用当前用户的用户 ID 将图像存储在 images 文件夹下。您有图像位置,因此 Firebase 将从存储中选择图像。

    uploadImg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(contentURI != null) {
    
                StorageReference childRef = storageRef.child("/images/"+uid+".jpg");
    
                //uploading the image
                UploadTask uploadTask = childRef.putFile(contentURI);
                uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_SHORT).show();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, "Upload Failed -> " + e, Toast.LENGTH_SHORT).show();
                    }
                });
            }
            else {
                Toast.makeText(MainActivity.this, "Select an image", Toast.LENGTH_SHORT).show();
            }
        }
    });
    

    声明变量:

    StorageReference storageRef;
    

    在 onCreateView 中:

    storageRef = storage.getReference();
    

    公开声明,否则会再次抛出错误

    【讨论】:

    • 我不断收到以下错误:尝试调用虚拟方法 'com.google.firebase.storage.StorageReference com.google.firebase.storage.StorageReference.child(java.lang.String)' on空对象引用
    • 您分配了storageRef 吗?它是firebase的存储参考
    • 我有:FirebaseStorage 存储;存储参考 storageRef;然后在 onCreate 我有 storageRef = storage.getReference();我的正确错误是:尝试在空对象引用上调用虚拟方法 'com.google.firebase.storage.StorageReference com.google.firebase.storage.FirebaseStorage.getReference()'
    • 那有什么问题?
    • 抱歉,必须更新到实施 'com.google.firebase:firebase-storage:17.0.0'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2021-04-30
    • 2021-11-11
    • 2018-03-09
    • 2023-03-19
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多