J'ai utilisé dropzone.js dans MVC en suivant ce tutorial pour télécharger des images, mais après avoir téléchargé l’image, la vignette est toujours affichée et j’ai besoin de la supprimer chaque fois que je télécharge une image.
J'ai essayé de remplacer le code HTML généré après le téléchargement de l'image à l'aide de jQuery, mais il ne s'affiche pas correctement car c'est la première fois que je dois actualiser la page pour qu'il s'affiche correctement, mais je ne souhaite pas le faire.
$("#ImageUpload").replaceWith('<form action="/Products/SaveUploadedFile" method="post" enctype="multipart/form-data" class="dropzone dz-clickable" id="dropzoneForm">'
+'<div class="fallback">'
+'<input name="file" type="file" multiple />'
+'<input type="submit" value="Upload" />'
+'</div>');
Vous pouvez essayer ceci:
myDropzone.on("complete", function(file) {
myDropzone.removeFile(file);
});
Plus d'informations ici: http://www.dropzonejs.com/#dropzone-methods
removeAllFiles()
et removeFile()
déclenchent également la suppression côté serveur, si vous avez également demandé à Dropzone de supprimer des fichiers.
La solution consiste à effacer l'aperçu du fichier uniquement côté client, et si vous aviez un message d'état vide, supprimez la classe dz-started
pour empêcher le CSS Dropzone de le masquer:
$('.dropzone')[0].dropzone.files.forEach(function(file) {
file.previewElement.remove();
});
$('.dropzone').removeClass('dz-started');
Une autre option (similaire à la réponse de Giraldi, mais lorsque tous les fichiers sont terminés):
myDropzone.on("queuecomplete", function () {
this.removeAllFiles();
});
c’était en fait une chose facile à faire, mais un peu de temps c’est difficile, donc je supprime simplement le code généré par dropzone à l’aide de jquery et ajoute un bouton avec 'id = btnCreate'
, puis
$('#btnCreate').click(function () {
$('div.dz-success').remove();
});
et quand je télécharge la vignette supprimée après avoir cliqué sur le bouton
docsDropzone.on('complete', function (response)
{
$(".dz-preview").remove();
});
Ci-dessus fonctionne pour moi
Juste un fyi ...
La méthode removeAllFiles
n'est pas nécessairement le premier choix. Qui est identique à removeFile(file)
.
J'ai un gestionnaire d'événements pour l'événement removedfile
de dropZone ... Je l'utilise pour envoyer un message au serveur afin de supprimer le fichier correspondant du serveur (si un utilisateur supprime la vignette après son téléchargement). L'utilisation de la méthode removeAllFiles
(ainsi que de la removeFile(file))
individualisée déclenche l'événement removedfile
qui supprime les images téléchargées en plus d'effacer les vignettes.
Donc, on pourrait ajouter quelques précisions à ce sujet, mais dans la réalité, la méthode mentionnée dans la réponse principale sur ce fil n'est pas correcte.
En regardant dans l'API pour Dropzone, je ne vois pas d'appel d'API pour simplement réinitialiser ou effacer les vignettes ... La méthode disable()
effacera les noms de fichiers stockés et ce qui ne disparaît pas mais ne supprime pas les vignettes ... Semble que dropzoneJS manque appel API critique pour être honnête.
Mon travail consiste à réinitialiser manuellement le div contenant pour dropzone:
document.getElementById("divNameWhereDropzoneClassIs").innerHTML = ""
Cela efface les vignettes sans déclencher l'événement removedfile
qui est censé être utilisé pour supprimer une image du serveur ...
essayez ceci sur votre bibliothèque dropzone dropzone.js; mais le temps imparti pour fermer automatiquement 2500
success: function(file) {
if (file.previewElement) {
return file.previewElement.classList.add("dz-success"),
$(function(){
setTimeout(function(){
$('.dz-success').fadeOut('slow');
},2500);
});
}
},
Une autre façon d'effacer ces vignettes
Dropzone.prototype.removeThumbnail = function () {
$(".dz-preview").fadeOut('slow');
$(".dz-preview:hidden").remove();
};
alors vous l'appelez comme ceci:
{your_dropzone}.removeThumbnail();