【问题标题】:Update profile photo after images resized with Firebase extension使用 Firebase 扩展调整图像大小后更新个人资料照片
【发布时间】:2020-08-12 07:30:36
【问题描述】:

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

 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 方法获取)不再有效,因为该图像已从存储中删除,现在存在的是一个新图像和一个新令牌,使用户没有“照片”在个人资料中,如果调整大小的过程可能需要长达 60 秒的时间,而且还有时间查询数据库,我怎么能拉出调整大小的图像来更新我的用户的个人资料照片?

新图像看起来像是一个相同的标记,唯一的区别是在末尾添加了一个“_480x320”:

【问题讨论】:

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


【解决方案1】:

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

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


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

【讨论】:

  • 但是如果我这样做,数据库中的节省就不存在了,对吗?事实上,我只是添加额外的空间
  • 它将创建调整大小的图像并保留原始图像。
  • 在银行保持原有消费相等
  • 查看我的答案的更新:您需要自己实现调整大小的过程,或者您需要将图像 url 更新为由 Firebase 扩展调整大小的新图像。 Firebase 扩展非常棒,因为它们允许您快速部署标准业务逻辑,但它们可能在配置选项方面受到限制。
  • 实际上并没有太大的不同,但您可以完全控制过程。因此,您可以删除原始图像并使用相同的名称重命名新图像。
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 2020-03-16
  • 2011-07-20
  • 2012-05-05
相关资源
最近更新 更多