如何直接从URL上传图像到FireBase?

问题描述 投票:0回答:1

我有一个应用程序设置,我通过谷歌登录验证用户。如果用户正确验证,将允许用户进入下一个活动。除了名称,该帐户中用户的电子邮件和个人资料图片也会保存到Firebase。

现在的问题是,我能够将名称和电子邮件存储到Firebase,但我无法将配置文件图像直接从URL保存到Firebase。

 GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
                            String F_name = acct.getDisplayName();
                            String L_name = acct.getFamilyName();
                            String email = acct.getEmail(); 
                            final Uri photo = acct.getPhotoUrl();

                            final StorageReference FILEPATH = FirebaseStorage.getInstance().getReference().child("Profile images/"+email +".jpg");


                            FILEPATH.putFile(photo).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


                                    Map<String, Object> profileToSave = new HashMap<>();

                                    profileToSave.put("Profile Pic",photo.toString());
                                    docRef.set(profileToSave).addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void aVoid) {


                                            startActivity(new Intent(getApplicationContext(),profile.class));
                                            finish();


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

                                            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                                }
                            });

以下几行来自我得到的错误

E/UploadTask: could not locate file for uploading:

E/StorageException: StorageException has occurred.

An unknown error occurred, please check the HTTP result code and inner exception for server response. Code: -13000 HttpResult: 0

E/StorageException: No content provider:

期待尽快提出任何建议。如果有人得到解决方案或其他方法,请告诉我。谢谢

android firebase url io firebase-storage
1个回答
0
投票

简短的回答是,你不能......但实际上,没有太多理由。如果您有网址,则可以使用该网址,因此无需将文件上传到Firebase。我建议您只需将URL存储在实时数据库中。现在,要与电子邮件/密码用户(在帐户创建时不自动拥有个人资料图片)同步,并允许用户更新他们的个人资料图片:

让用户设置他们的个人资料图片(通过将图像上传到Firebase存储)。上传完成后,获取下载URL(存储参考!)并在实时数据库中更新photoUrl。

请参阅下面的代码:

storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.d(TAG, "before onSuccess: " + user.getPhotoUrl());
                UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                        .setPhotoUri(uri).build();
                user.updateProfile(profileUpdates);
                Log.d(TAG, "after onSuccess: " + uri);
                //add new photoUrl to db
                databaseReference.child("photoUrl").setValue(uri.toString());
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.d(TAG, "onFailure:" + e);
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.