首页 > 解决方案 > Android Firebase - 将图像从drawable上传到存储

问题描述

我正在尝试从可绘制文件夹中获取图像并将其保存在 Firebase 存储中。要保存我使用的图像UploadTask,它需要一个 Uri 文件。来自drawable的图像是int。无论如何可以将该 int 转换为 Uri?

请查看我的代码

 private void saveProfileImgToStorage(final User user) {
    storageRef = FirebaseStorage.getInstance().getReference();

    StorageReference userImgProfile = storageRef.child("/usersProfiles/" + currentUser.getUid() +"/profile_image");
    UploadTask uploadTask;

          //What should i do here??
          //This is the path of the image "R.drawable.ic_account"
    uploadTask = userImgProfile.putFile();

    uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Uri firebaseURL = taskSnapshot.getDownloadUrl();
            user.setProfilePic(firebaseURL.toString());
            uploadToFirebaseDatabase(user);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d(TAG,e.getMessage().toString());
        }
    });
}

编辑

找到了解决方案

   //This how i should write it - and now it works!
  Uri imageUri = Uri.parse("android.resource://"+ R.class.getPackage().getName()+"/"+R.drawable.profile_image);
   UploadTask uploadTask;

    uploadTask = userImgProfile.putFile(imageUri);

标签: androidfirebasefirebase-storage

解决方案


要从存储到可绘制的图像中获取 uri,只需执行以下操作

Uri imageUri = Uri.parse("android.resource://your.package.name/" + R.drawable.ic_account);

干净一点

 Uri imageUri = Uri.parse("android.resource://" + context.getPackageName() + 
 R.drawable.ic_account);

如果您引用 Activity 或Fragment,context可以在哪里。thisgetActivity()

要将其上传到 Firebase,您需要执行此操作

File file = new File(imageUri.getPath());

接着

uploadTask = userImgProfile.putFile(file);

推荐阅读