J'ai une entrée avec un champ de type média.
Lorsque j'essaie de supprimer une entrée, j'utilise le code:
strapi.query('entry').delete({ id: entry.id }); strapi.query('file', 'upload').delete({ id: entry.image.id });
L'entrée est supprimée avec succès, ainsi que l'enregistrement de "Téléchargement de fichiers". Mais le fichier reste toujours dans le dossier upload . Comment puis-je le supprimer?
3 Réponses :
Essayez d'appeler l'organisation strapi. fonctions de votre contrôleur:
delete: async ctx => { ctx.body = await strapi.plugins['content-manager'].services['contentmanager'].delete(ctx.params, ctx.request.query); }, deleteAll: async ctx => { ctx.body = await strapi.plugins['content-manager'].services['contentmanager'].deleteMany(ctx.params, ctx.request.query); }
Ça ne marche pas pour moi. Une exception est levée: (node: 16792) UnhandledPromiseRejectionWarning: Erreur: vous ne pouvez pas appeler la méthode de requête sans passer le nom du modèle comme premier argument.
Essayez ce qui suit, en supposant que votre type de contenu était article:
dans /api/articles/controllers/articles.js
'use strict'; const { parseMultipartData, sanitizeEntity } = require('strapi-utils'); module.exports = { async delete(ctx) { const { id } = ctx.params; const entity = await strapi.services.articles.delete({ id }); //with strapi multiple media if(entity){ if (entity.gallery.length > 0) { entity.gallery.forEach(image => { strapi.plugins.upload.services.upload.remove(image); }); } } //or with strapi single media if(entity){ strapi.plugins.upload.services.upload.remove(entity.image); } return sanitizeEntity(entity, { model: strapi.models.articles }); } }
Ce code supprime l'entrée de la bibliothèque multimédia et supprime les fichiers du répertoire uploads
:
const file = await strapi.plugins['upload'].services.upload.fetch({ id }); await strapi.plugins['upload'].services.upload.remove(file);