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

时间:2019-01-31 10:57:56

标签: android firebase url io firebase-storage

我有一个应用设置,我在其中通过Google登录对用户进行身份验证。如果用户正确进行身份验证,则将允许该用户进入下一个活动。以及该帐户的用户的名称,电子邮件和个人资料图像也将保存到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:

尽快期待的任何建议。让我知道,如果有一个人得到了解决或其他的方式做所以。谢谢

1 个答案:

答案 0 :(得分:0)

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

让用户设置自己的个人资料图片(通过将图片上传到Firebase Storage)。上传完成后,获取(存储参考的)下载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);
            }
        });