【问题标题】:Android Firebase - upload image from drawable to storageAndroid Firebase - 将图像从drawable上传到存储
【发布时间】:2018-12-15 00:42:19
【问题描述】:

我正在尝试从可绘制文件夹中获取图像并将其保存在 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);

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    要从存储到 drawable 的图像中获取 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,context 可以是 this,或者来自 Fragment 的 getActivity()

    要将其上传到 Firebase,您需要这样做

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

    然后

    uploadTask = userImgProfile.putFile(file);
    

    【讨论】:

    • 由于某种原因,它告诉我“没有找到授权包”,我确实像你一样
    • 你试过第二个吗?它会自己获取包,还有你的.package.name 你应该把你的包名放在哪里
    • 我做了第二个答案,这就是它给我的0663-21280/com.world.bolandian.talent E/StorageException: No package found for authority: android.resource://com.world.bolandian.talent2131231132 java.io.FileNotFoundException: No package found for authority: android.resource://com.world.bolandian.talent2131231132
    • 方法getpath不可用。但你确定这是答案吗?因为它找不到图像路径。我想我需要以某种方式改变路径
    • 我认为它有效,但现在我遇到了其他错误,could not retrieve file size for upload file。我觉得图片太大了
    猜你喜欢
    • 2019-02-11
    • 2018-06-05
    • 1970-01-01
    • 2017-09-25
    • 2018-07-04
    • 2021-12-31
    相关资源
    最近更新 更多