在创建用户期间,我将您的照片插入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秒,并且还有时间查询数据库,我怎么能拉出经过调整大小的图像以更新用户的个人资料照片?
答案 0 :(得分:1)
在配置“调整图像大小” Firebase扩展时,您可以选择是否要删除原始文件。
您应该选择“ No”,如下所示。
如果您希望对过程进行更多控制(例如,删除原始图像并将其名称分配给新的(调整大小的)图像),则必须自己实施图像调整大小过程。为此,您可以修改以下官方Cloud Function示例:https://github.com/firebase/functions-samples/tree/master/generate-thumbnail