Android- 在特定用户下将图片上传到 Firebase

Android- Upload image to Firebase under a specific user

我是 Android 的新手,想制作一个允许用户使用 Firebase 存储上传图片的应用程序。在他们登录后,我将他们的 Uid 发送到 SharedPreferences,以便我稍后可以在我的图像上传 activity 中检索它。我需要它,以便当图像被发送到 Firebase 时,它​​会被放在他们的用户 ID 的文件夹下。

这是我当前的登录 activity 检索 Uid:

FirebaseAuth auth = FirebaseAuth.getInstance();
        FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
                if (firebaseUser != null) {
                    String userId = firebaseUser.getUid();
                    sharedPref = getPreferences(MODE_PRIVATE);
                    SharedPreferences.Editor editor = sharedPref.edit();
                    editor.putString("firebasekey", userId);
                    editor.commit();

这是我上传的图片 activity:

sharedPref = getPreferences(MODE_PRIVATE);
    String UserId = sharedPref.getString("firebasekey", "1");
    StorageReference storageRef= FirebaseStorage.getInstance().getReference();
    StorageReference mountainsRef = storageRef.child("uploads/"+UserId+System.currentTimeMillis());

将不胜感激。

嗨,Mozy,下面的代码应该在调用启动意图时从图库中选择图像并将其上传到 firebase。希望这有帮助。

private void updateImg() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select picture"), CHOOSE_IMAGE);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CHOOSE_IMAGE && resultCode == Activity.RESULT_OK) {
        if (data == null) {
            // Display an error
            return;
        }


        // create an inputStream from the intent result we have just created
        InputStream inputStream = null;
        try {
            inputStream = yourActivity.this.getContentResolver().openInputStream(data.getData());
            uploadImageToFirebase(inputStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

private void uploadImageToFirebase(InputStream rInputStream) {
    sharedPref = getPreferences(MODE_PRIVATE);
    String UserId = sharedPref.getString("firebasekey", "1");
    StorageReference storageRef = 
    FirebaseStorage.getInstance().getReference();
    StorageReference mountainsRef = storageRef.child("uploads/"+UserId+System.currentTimeMillis());
    // running the task
    UploadTask uploadTask = mountainsRef.putStream(rInputStream);
    uploadTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // show error
        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            // do ui stuff
        }
    });
}

给你

String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
UploadTask uploadTask = FirebaseStorage.getInstance().child("newFolder").getReference(userUid).putBytes(yourPhotoToByteArray);
uploadTask
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });

并检索图像

StorageReference storageReference = FirebaseStorage.getInstance().getReference("newFolder/" + userUid);

您可以阅读 here more about FirebaseCloudStorage. Here how to upload, and here 如何下载它们。