Bomjour
Pour la gestion des des téléchargement des fichier j'utilise un Biavior fait par Xety
https://github.com/Xety/Cake3-Upload

Dans mon model UsersTable j'ai configurer le biavior comme ceci :

$this->addBehavior('Xety/Cake3Upload.Upload',[
            'fields' => [
                'avatar' => [
                    'path' => 'uploads/avatar/:id/:md5',
                    'overwrite' => true
                ]
            ]
        ]);

Selon la documentation du Behavior l'option overwrite écrase le fichier.

Le problème est qui n'éfface pas les sous fichiers que j'ai de redimensioner qui sont dans le même document avant qu'il écrase le fichier original

Voci la strucutre du fichier original
upload/avatars/1/69f6368100bcce82d3752a60fac7c509.png

voici la stucture des fichier redimensioner :
upload/avatars/1/3ef74caeb0dd1c480ff9efc001e01ce4_150x150.png

Il faudrait que dans la fonction _deleteOldUpload()
Il faudrais qui efface toute les fichier avant de "stoker" le nouveau fichier.

Merci de votre aide.

8 réponses


lakamark
Auteur
Réponse acceptée

@Xeta : Je vais m'occuper de créer une fonction dans mon application qui va surpprimer les fichier de ce type :
69f6368100bcce82d3752a60fac7c509_150x150.png
sans que je surpprime le fichier original.

Bonjour.
Ce n'est pas un problème de son Behavior, puisqu'il ne prend pas en compte les redimensionnements et donc n'est prévu que pour supprimer qu'un seul fichier.

Pour ce que tu veux faire, il te suffit de créer ton propre Behavior.

Bonjour,

Ne je peux pas supprimer tous les fichiers avant de stocker le nouveau fichier car si une personne utilise un dossier en commun (i.e upload/avatars/69f6368100bcce82d3752a60fac7c509.png) ceci va supprimer tout les autre avatars des membres.

A quelle moment tu redimensionnes tes fichiers ?
Quel est le chemin exact qui est enregistré en base de donnée ?

lakamark
Auteur

Bonjour Xeta
J'utilise un petit helpers dans mes vues pour redimensionner les images :

<?= $this->Image->resize($this->request->session()->read('Auth.User.avatar'),50,50,['class'=>'img-circle']); ?>

Il créer les image redimensionner au même niveaux que celui du fichier original qui généré par votre bieavior.

Dans ma basse de donnée je rentre ce chemain :
uploads/avatar/1/318622e58ad6062a70e486e43775b57f.png

Ce que je trouve de bizarre avec le helper que tu utilises, c'est qu'il ne fait pas qu'ajouter les dimensions en plus du nom de fichier, il en modifie également le nom.
Ce serait plus logique qu'il fasse quelque chose comme ça :

  • Non redimensionné : 69f6368100bcce82d3752a60fac7c509.png
  • Redimensionné : 69f6368100bcce82d3752a60fac7c509_150x150.png

De cette manière, dans le cas où plusieurs images différentes se retrouveraient dans le même dossier, il serait plus facile d'en supprimer une avec ses versions redimensionnées sans risque d'affecter les autres.

lakamark
Auteur

@lartak : C'est ce que je penssais, je peux surpprimer seulement les fichier 69f6368100bcce82d3752a60fac7c509_150x150.png sans touché au fichier original avec une fonction ie je pourrais créer.
Voici le lien du helpers pour les image redimensionné : https://github.com/anouarcharif/CakePHP3-ImageHelper

lakamark
Auteur

Ah oui j'ai oublié quand je surprime le contenu de la basse de donnée le bieavior ne détruit pas le fichier. Je me remasse des avatar qui ne sont plus à un compte utilisateur par exemple. Une fonction beforeDelette();

Le behavior ne gère pas la suppression de plusieurs fichiers, il supprime uniquement le fichier qui est renseigné en base de donnée. Pour le beforeDelete(), oui c'est prévus, mais je le ferais quand je refactoriserai le behavior pour utiliser le callback afterSave() au lieu du beforeSave().