Parse Server: удалить старое изображение профиля, связанное с пользователем - PullRequest
0 голосов
/ 28 марта 2020

Я использую адаптер файловой системы для сохранения загруженных файлов на сервере анализа. В моем приложении каждый пользователь может иметь фотографию профиля. когда пользователь хочет изменить свою фотографию, старую следует удалить с сервера. Но старое изображение остается неизменным. Это приводит к заполнению памяти сервера через некоторое время. Вот мой код:

public void update (Uri uri)
    {
        ParseUser user = ParseUser.getCurrentUser();
        if(uri!=null){
            InputStream iStream=getContentResolver().openInputStream(uri);
            byte[]image=Helper.getBytes(iStream);
            ParseFile file=new ParseFile("profile.png",image);
            file.saveInBackground();
            user.put("photo",file);
            user.saveInBackground();
        }
    }

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

К сожалению Android SDK не имеет функции для удаления файла, но вы можете сделать это, используя функции облачного кода или, возможно, триггер. Примерно так должно решить вашу проблему:

Parse.Cloud.beforeSave('_User', ({ original, object }) => {
  if (original.get('photo').url() !== object.get('photo').url()) {
    original.get('photo').destroy();
  }
});
0 голосов
/ 31 марта 2020

Вы должны удалить строку "file.saveInBackground();". Потому что это работает в фоновом режиме. И когда вы помещаете этот файл в пользовательский объект, сохранение файла не завершено, и сервер синтаксического анализа снова загрузит тот же файл на сервер с пользовательским объектом. и у вас останется два дубликата.

Измените свой код на:

public void update (Uri uri)
    {
        ParseUser user = ParseUser.getCurrentUser();
        if(uri!=null){
            InputStream iStream=getContentResolver().openInputStream(uri);
            byte[]image=Helper.getBytes(iStream);
            ParseFile file=new ParseFile("profile.png",image);
            user.put("photo",file);
            user.saveInBackground();
        }
    }

С этим кодом вы загружаете файл только один раз

...