使用Firebase扩展程序调整图像大小后更新个人资料照片

时间:2020-04-28 13:10:32

标签: android firebase google-cloud-functions google-cloud-storage firebase-extensions

在创建用户期间,我将您的照片插入Firebase Storage数据库中(如下方法所示):

 final StorageReference ref = FirebaseStorage.getInstance().getReference("/images/"+barNomeUser.getText().toString()+"perfilFoto"); 
    ref.putFile(uriSelecionada) // Insere a foto selecionada no Storage
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) { 
                            Log.i("Url do firebase", uri.toString());
                            uriSelecionada = uri; 
                            String uuid = FirebaseAuth.getInstance().getUid(); 
                            final String nameUser = barNomeUser.getText().toString(); //
                            String profileFotoUrl = uriSelecionada.toString(); 
                            final UserApp userApp = new UserApp(uuid, nameUser, profileFotoUrl, 0, 0, 0, 0);
                            UserProfileChangeRequest profileChangeRequest = new UserProfileChangeRequest.Builder()
                                    .setDisplayName(nameUser).setPhotoUri(uri).build();
                            firebaseUser.updateProfile(profileChangeRequest).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if(task.isSuccessful()){
                                        Log.i("Register full", firebaseUser.getDisplayName());
                                    }
                                } ...

但是,我注意到它消耗了很多数据库内存,并且我意识到cloudFunctions storage-resize函数可以解决我的问题……甚至可以解决它,但是,它产生了另一个更大的问题,即原始图像在调整大小后被删除,这使得先前的访问令牌(由getDownloadUrl方法获取)不再有效,因为该镜像已从Storage中删除,现在存在的是新镜像和新令牌,从而使用户没有“照片”中的图片,如果调整大小过程最多需要60秒,并且还有时间查询数据库,我怎么能拉出经过调整大小的图像以更新用户的个人资料照片?

新图像看起来像是获得了相等的令牌,唯一的不同是在末尾添加了“ _480x320”: imageExample

1 个答案:

答案 0 :(得分:1)

在配置“调整图像大小” Firebase扩展时,您可以选择是否要删除原始文件。

您应该选择“ No”,如下所示。

enter image description here


如果您希望对过程进行更多控制(例如,删除原始图像并将其名称分配给新的(调整大小的)图像),则必须自己实施图像调整大小过程。为此,您可以修改以下官方Cloud Function示例:https://github.com/firebase/functions-samples/tree/master/generate-thumbnail