Quelqu'un peut-il expliquer comment implémenter le plugin jQuery File Upload?

118

EDIT (octobre 2019):

6 ans plus tard, jQuery File Upload est clairement en train de rendre les gens fous. Si vous trouvez peu de réconfort dans les réponses ici, essayez une recherche de NPM pour une alternative moderne. Cela ne vaut pas la peine, je le promets.

J'ai recommandé Uploadify dans l'édition précédente mais, comme l'a souligné un commentateur, ils ne semblent plus offrir une version gratuite. Uploadify était si 2013 de toute façon.


ÉDITER:

Cela semble toujours générer du trafic, alors je vais vous expliquer ce que j'ai fini par faire. J'ai finalement fait fonctionner le plugin en suivant le tutoriel dans la réponse acceptée. Cependant, jQuery File Upload est un vrai problème et si vous recherchez un plugin de téléchargement de fichiers plus simple, je vous recommande vivement Uploadify . Comme une réponse l'a souligné, il n'est gratuit que pour un usage non commercial.


Contexte

J'essaie d'utiliser le téléchargement de fichiers jQuery de blueimp pour permettre aux utilisateurs de télécharger des fichiers. Hors de la boîte, il fonctionne parfaitement , en suivant les instructions de configuration. Mais pour l'utiliser pratiquement sur mon site Web, je veux pouvoir faire plusieurs choses:

  • Inclure le téléchargeur sur l'une de mes pages existantes
  • Changer le répertoire des fichiers téléchargés

Tous les fichiers du plugin se trouvent dans un dossier sous la racine.

J'ai essayé...

  • Déplacement de la page de démonstration à la racine et mise à jour des chemins pour les scripts nécessaires
  • Changer les options 'upload_dir' et 'upload_url' dans le fichier UploadHandler.php comme suggéré ici .
  • Modification de l'URL dans la deuxième ligne du javascript de démonstration

Dans tous les cas, les spectacles de prévisualisation, et les pistes de barre de progression, mais les fichiers ne parviennent pas à télécharger, et je reçois cette erreur de la console: Uncaught TypeError: Cannot read property 'files' of undefined. Je ne comprends pas comment toutes les parties du plugin fonctionnent, ce qui rend le débogage difficile.

Code

Le javascript dans la page de démonstration:

$(function () {
'use strict';
// Change this to the location of your server-side upload handler:
var url = 'file_upload/server/php/UploadHandler.php',
    uploadButton = $('<button/>')
        .addClass('btn')
        .prop('disabled', true)
        .text('Processing...')
        .on('click', function () {
            var $this = $(this),
                data = $this.data();
            $this
                .off('click')
                .text('Abort')
                .on('click', function () {
                    $this.remove();
                    data.abort();
                });
            data.submit().always(function () {
                $this.remove();
            });
        });
$('#fileupload').fileupload({
    url: url,
    dataType: 'json',
    autoUpload: false,
    acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
    maxFileSize: 5000000, // 5 MB
    // Enable image resizing, except for Android and Opera,
    // which actually support image resizing, but fail to
    // send Blob objects via XHR requests:
    disableImageResize: /Android(?!.*Chrome)|Opera/
        .test(window.navigator.userAgent),
    previewMaxWidth: 100,
    previewMaxHeight: 100,
    previewCrop: true
}).on('fileuploadadd', function (e, data) {
    data.context = $('<div/>').appendTo('#files');
    $.each(data.files, function (index, file) {
        var node = $('<p/>')
                .append($('<span/>').text(file.name));
        if (!index) {
            node
                .append('<br>')
                .append(uploadButton.clone(true).data(data));
        }
        node.appendTo(data.context);
    });
}).on('fileuploadprocessalways', function (e, data) {
    var index = data.index,
        file = data.files[index],
        node = $(data.context.children()[index]);
    if (file.preview) {
        node
            .prepend('<br>')
            .prepend(file.preview);
    }
    if (file.error) {
        node
            .append('<br>')
            .append(file.error);
    }
    if (index + 1 === data.files.length) {
        data.context.find('button')
            .text('Upload')
            .prop('disabled', !!data.files.error);
    }
}).on('fileuploadprogressall', function (e, data) {
    var progress = parseInt(data.loaded / data.total * 100, 10);
    $('#progress .bar').css(
        'width',
        progress + '%'
    );
}).on('fileuploaddone', function (e, data) {
    $.each(data.result.files, function (index, file) {
        var link = $('<a>')
            .attr('target', '_blank')
            .prop('href', file.url);
        $(data.context.children()[index])
            .wrap(link);
    });
}).on('fileuploadfail', function (e, data) {
    $.each(data.result.files, function (index, file) {
        var error = $('<span/>').text(file.error);
        $(data.context.children()[index])
            .append('<br>')
            .append(error);
    });
}).prop('disabled', !$.support.fileInput)
    .parent().addClass($.support.fileInput ? undefined : 'disabled');
});


Je suis surpris par le manque de documentation; il semble que cela devrait être une chose simple à changer. J'apprécierais si quelqu'un pouvait expliquer comment faire cela.

Austen
la source
10
Bon format de question. Sympa de voir l'organisation.
jdero
imprimer «e» et «données» dans la console juste avant la ligne d'erreur, quelles sont les valeurs?
john 4d5
3
Uploadi fy est une licence MIT, c'est-à-dire totalement gratuit. Cependant, Uploadi Five du même développeur / site Web coûte 5 à 100 $ selon l'utilisation
MartinJH
2
En deux ans, la documentation de jQuery-File-Upload ne s'est pas améliorée. Argh.
Chuck Le Butt
1
@MartinJH il y a peut-être eu un uploadify à un moment donné, mais pour le moment, il n'y en a qu'un - la version uploadiFive payante. Et il n'y a pas non plus de démo; ce n'est qu'une vidéo. Mauvaise forme.
Steve Horvath

Réponses:

72

Je cherchais une fonctionnalité similaire il y a quelques jours et suis tombé sur un bon tutoriel sur tutorialzine. Voici un exemple de travail. Le tutoriel complet peut être trouvé ici .

Formulaire simple pour tenir le dialogue de téléchargement de fichier:

<form id="upload" method="post" action="upload.php" enctype="multipart/form-data">
  <input type="file" name="uploadctl" multiple />
  <ul id="fileList">
    <!-- The file list will be shown here -->
  </ul>
</form>

Et voici le code jQuery pour télécharger les fichiers:

$('#upload').fileupload({

  // This function is called when a file is added to the queue
  add: function (e, data) {
    //This area will contain file list and progress information.
    var tpl = $('<li class="working">'+
                '<input type="text" value="0" data-width="48" data-height="48" data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" />'+
                '<p></p><span></span></li>' );

    // Append the file name and file size
    tpl.find('p').text(data.files[0].name)
                 .append('<i>' + formatFileSize(data.files[0].size) + '</i>');

    // Add the HTML to the UL element
    data.context = tpl.appendTo(ul);

    // Initialize the knob plugin. This part can be ignored, if you are showing progress in some other way.
    tpl.find('input').knob();

    // Listen for clicks on the cancel icon
    tpl.find('span').click(function(){
      if(tpl.hasClass('working')){
              jqXHR.abort();
      }
      tpl.fadeOut(function(){
              tpl.remove();
      });
    });

    // Automatically upload the file once it is added to the queue
    var jqXHR = data.submit();
  },
  progress: function(e, data){

        // Calculate the completion percentage of the upload
        var progress = parseInt(data.loaded / data.total * 100, 10);

        // Update the hidden input field and trigger a change
        // so that the jQuery knob plugin knows to update the dial
        data.context.find('input').val(progress).change();

        if(progress == 100){
            data.context.removeClass('working');
        }
    }
});
//Helper function for calculation of progress
function formatFileSize(bytes) {
    if (typeof bytes !== 'number') {
        return '';
    }

    if (bytes >= 1000000000) {
        return (bytes / 1000000000).toFixed(2) + ' GB';
    }

    if (bytes >= 1000000) {
        return (bytes / 1000000).toFixed(2) + ' MB';
    }
    return (bytes / 1000).toFixed(2) + ' KB';
}

Et voici l'exemple de code PHP pour traiter les données:

if($_POST) {
    $allowed = array('jpg', 'jpeg');

    if(isset($_FILES['uploadctl']) && $_FILES['uploadctl']['error'] == 0){

        $extension = pathinfo($_FILES['uploadctl']['name'], PATHINFO_EXTENSION);

        if(!in_array(strtolower($extension), $allowed)){
            echo '{"status":"error"}';
            exit;
        }

        if(move_uploaded_file($_FILES['uploadctl']['tmp_name'], "/yourpath/." . $extension)){
            echo '{"status":"success"}';
            exit;
        }
        echo '{"status":"error"}';
    }
    exit();
}

Le code ci-dessus peut être ajouté à n'importe quel formulaire existant. Ce programme télécharge automatiquement les images, une fois qu'elles sont ajoutées. Cette fonctionnalité peut être modifiée et vous pouvez soumettre l'image pendant que vous soumettez votre formulaire existant.

J'ai mis à jour ma réponse avec le code réel. Tous les crédits à l'auteur original du code.

Source: http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/

Subrat Pattnaik
la source
2
Pouvez-vous copier les parties importantes de ce didacticiel ici, donc s'il disparaît, votre réponse est toujours utile?
1
mais attention à ne pas plagier
tacaswell
1
ATTENTION: à toute personne utilisant l'extrait de code PHP, supprimez l' if($_POST) instruction. POST est censé être vide dans lequel le contenu du fichier est envoyé $_FILES['upfile']['tmp_name']. J'espère que cela fera gagner du temps à quelqu'un.
Edward
1
Trouvé un autre c-sharpcorner.com/UploadFile/da55bf/…
Rush.2707
Quelqu'un peut-il me suggérer quels sont les fichiers js / jquery nécessaires pour exécuter le script ci-dessus
Manasa
29

Je viens de passer 2 heures à me battre avec jQuery Upload mais j'ai abandonné à cause de la quantité de dépendances (j'avais 13 fichiers JS inclus pour obtenir toutes les cloches et sifflets).

J'ai fait un peu plus de recherche et suis tombé sur un projet soigné appelé Dropzone.js , qui n'a aucune dépendance.

L'auteur a également créé une démo de bootstrap inspirée du plugin jQuery File Upload.

J'espère que cela fera gagner du temps à quelqu'un d'autre.

Tim
la source
1
Chose importante à noter: Dropzone.js a l'air bien, mais il ne prend en charge que les versions IE10 et supérieures. Prise en charge du téléchargement de fichiers jQuery depuis IE6;)
Nickvda
11
jQuery File Upload est tout simplement impossible de le faire fonctionner ... J'ai envoyé de nombreuses heures à essayer car il a de très belles fonctionnalités, mais à la dernière minute, mon âme était seulement remplie d'agonie !!! Quel désespoir !!! Ensuite, j'ai vu votre article sur Dropzone.js et en 5 minutes, je le fais fonctionner et comme je le voulais! Vous m'avez sauvé ...
rigon
Je ne saurais trop vous remercier, j'ai passé près de 12 heures à faire fonctionner jQuery-FIle-Upload comme je le souhaite et finalement je suis tombé sur cette question. Tu m'as sauvé.
sdd
Voici un exemple de téléchargement de fichier jquery basé sur une base de données: github.com/CodeHeight/ImageLibrary
JoshYates1980
J'ai passé 3 jours mais je ne peux toujours pas personnaliser leur code
May Weather VN
4

J'ai également eu du mal avec cela, mais je l'ai fait fonctionner une fois que j'ai compris comment les chemins fonctionnent dans UploadHandler.php: upload_dir et upload_url sont à peu près les seuls paramètres à examiner pour le faire fonctionner. Vérifiez également les journaux d'erreurs de votre serveur pour obtenir des informations de débogage.

Louis Ferreira
la source
3

Découvrez le téléchargeur d'image par glisser-déposer avec aperçu de l'image à l'aide du plugin dropper jquery.

HTML

<div class="target" width="78" height="100"><img /></div>

JS

$(".target").dropper({
    action: "upload.php",

}).on("start.dropper", onStart);
function onStart(e, files){
console.log(files[0]);

    image_preview(files[0].file).then(function(res){
$('.dropper-dropzone').empty();
//$('.dropper-dropzone').css("background-image",res.data);
 $('#imgPreview').remove();        
$('.dropper-dropzone').append('<img id="imgPreview"/><span style="display:none">Drag and drop files or click to select</span>');
var widthImg=$('.dropper-dropzone').attr('width');
        $('#imgPreview').attr({width:widthImg});
    $('#imgPreview').attr({src:res.data});

    })

}

function image_preview(file){
    var def = new $.Deferred();
    var imgURL = '';
    if (file.type.match('image.*')) {
        //create object url support
        var URL = window.URL || window.webkitURL;
        if (URL !== undefined) {
            imgURL = URL.createObjectURL(file);
            URL.revokeObjectURL(file);
            def.resolve({status: 200, message: 'OK', data:imgURL, error: {}});
        }
        //file reader support
        else if(window.File && window.FileReader)
        {
            var reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onloadend = function () {
                imgURL = reader.result;
                def.resolve({status: 200, message: 'OK', data:imgURL, error: {}});
            }
        }
        else {
            def.reject({status: 1001, message: 'File uploader not supported', data:imgURL, error: {}});
        }
    }
    else
        def.reject({status: 1002, message: 'File type not supported', error: {}});
    return def.promise();
}

$('.dropper-dropzone').mouseenter(function() {
 $( '.dropper-dropzone>span' ).css("display", "block");
});

$('.dropper-dropzone').mouseleave(function() {
 $( '.dropper-dropzone>span' ).css("display", "none");
});

CSS

.dropper-dropzone{
    width:78px;
padding:3px;
    height:100px;
position: relative;
}
.dropper-dropzone>img{
    width:78px;
    height:100px;
margin-top=0;
}

.dropper-dropzone>span {
    position: absolute;
    right: 10px;
    top: 20px;
color:#ccc;


}

.dropper .dropper-dropzone{

padding:3px !important    
}

Démo Jsfiddle

tvshajeer
la source
C'est une solution extrêmement simple.
Miron
2

C'est un bon plugin Angular pour télécharger des fichiers, et c'est gratuit!

téléchargement de fichier angulaire

Sahip
la source
2
Salut. Veuillez ne pas publier de liens comme réponses, si le site est hors ligne ou si le lien change, votre réponse deviendra inutile. Au lieu de cela, utilisez les informations sur le site pour créer votre réponse et utilisez le lien comme référence uniquement. Merci.
Cthulhu
1

J'ai eu du mal avec ce plugin pendant un moment sur Rails, puis quelqu'un l'a gemifié en rendant obsolète tout le code que j'avais créé.

Bien qu'il semble que vous ne l'utilisiez pas dans Rails, cependant, si quelqu'un l'utilise, consultez ce joyau . La source est ici -> jQueryFileUpload Rails .

Mettre à jour:

Afin de satisfaire le commentateur, j'ai mis à jour ma réponse. Essentiellement " utilisez cette gemme , voici le code source " Si elle disparaît alors faites-le le long du chemin.

ingénieur Dave
la source
1

Droply.js est parfait pour cela. C'est simple et livré pré-emballé avec un site de démonstration qui fonctionne hors de la boîte.

Gérémie
la source
0

Vous pouvez utiliser uploadify c'est le meilleur plugin jquery multiupload que j'ai utilisé.

La mise en œuvre est simple, le support du navigateur est parfait.

CORSAIRE
la source
7
nécessite le flash ... :(
Eva
2
Vous pouvez utiliser la version HTML 5 :)
CORSAIR
5
Si je ne me trompe pas, la version html5 de uploadify n'est pas gratuite. Cela coûte 5 $. uploadify.com/download
0112
2
Mais, ce n'est que 5 $ et non 500.
CORSAIR
7
Gardez à l'esprit que si vous souhaitez utiliser uploadify à des fins commerciales, vous devez acheter la licence commerciale (100 $) uploadify.com/download/download-uploadifive-commercial
Tim
0

Pour le plugin UI, avec la page jsp et Spring MVC.

Exemple html . Doit être dans un élément de formulaire avec un attribut id de fileupload

    <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="fileupload-buttonbar">
    <div>
        <!-- The fileinput-button span is used to style the file input field as button -->
        <span class="btn btn-success fileinput-button">
            <i class="glyphicon glyphicon-plus"></i>
            <span>Add files</span>
            <input id="fileuploadInput" type="file" name="files[]" multiple>
        </span>
        <%-- https://stackoverflow.com/questions/925334/how-is-the-default-submit-button-on-an-html-form-determined --%>
        <button type="button" class="btn btn-primary start">
            <i class="glyphicon glyphicon-upload"></i>
            <span>Start upload</span>
        </button>
        <button type="reset" class="btn btn-warning cancel">
            <i class="glyphicon glyphicon-ban-circle"></i>
            <span>Cancel upload</span>
        </button>
        <!-- The global file processing state -->
        <span class="fileupload-process"></span>
    </div>
    <!-- The global progress state -->
    <div class="fileupload-progress fade">
        <!-- The global progress bar -->
        <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
            <div class="progress-bar progress-bar-success" style="width:0%;"></div>
        </div>
        <!-- The extended global progress state -->
        <div class="progress-extended">&nbsp;</div>
    </div>
</div>
<!-- The table listing the files available for upload/download -->
<table role="presentation" class="table table-striped"><tbody class="files"></tbody></table>

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/css/jquery.fileupload.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/css/jquery.fileupload-ui.css">

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/vendor/jquery.ui.widget.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.iframe-transport.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload-process.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload-validate.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload-ui.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
            var maxFileSizeBytes = ${maxFileSizeBytes};
        if (maxFileSizeBytes < 0) {
            //-1 or any negative value means no size limit
            //set to undefined
            ///programming/5795936/how-to-set-a-javascript-var-as-undefined
            maxFileSizeBytes = void 0;
        }

        //https://github.com/blueimp/jQuery-File-Upload/wiki/Options
        ///programming/34063348/jquery-file-upload-basic-plus-ui-and-i18n
        ///programming/11337897/how-to-customize-upload-download-template-of-blueimp-jquery-file-upload
        $('#fileupload').fileupload({
            url: '${pageContext.request.contextPath}/app/uploadResources.do',
            fileInput: $('#fileuploadInput'),
            acceptFileTypes: /(\.|\/)(jrxml|png|jpe?g)$/i,
            maxFileSize: maxFileSizeBytes,
            messages: {
                acceptFileTypes: '${fileTypeNotAllowedText}',
                maxFileSize: '${fileTooLargeMBText}'
            },
            filesContainer: $('.files'),
            uploadTemplateId: null,
            downloadTemplateId: null,
            uploadTemplate: function (o) {
                var rows = $();
                $.each(o.files, function (index, file) {
                    var row = $('<tr class="template-upload fade">' +
                            '<td><p class="name"></p>' +
                            '<strong class="error text-danger"></strong>' +
                            '</td>' +
                            '<td><p class="size"></p>' +
                            '<div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' +
                            '<div class="progress-bar progress-bar-success" style="width:0%;"></div></div>' +
                            '</td>' +
                            '<td>' +
                            (!index && !o.options.autoUpload ?
                                    '<button class="btn btn-primary start" disabled>' +
                                    '<i class="glyphicon glyphicon-upload"></i> ' +
                                    '<span>${startText}</span>' +
                                    '</button>' : '') +
                            (!index ? '<button class="btn btn-warning cancel">' +
                                    '<i class="glyphicon glyphicon-ban-circle"></i> ' +
                                    '<span>${cancelText}</span>' +
                                    '</button>' : '') +
                            '</td>' +
                            '</tr>');
                    row.find('.name').text(file.name);
                    row.find('.size').text(o.formatFileSize(file.size));
                    if (file.error) {
                        row.find('.error').text(file.error);
                    }
                    rows = rows.add(row);
                });
                return rows;
            },
            downloadTemplate: function (o) {
                var rows = $();
                $.each(o.files, function (index, file) {
                    var row = $('<tr class="template-download fade">' +
                            '<td><p class="name"></p>' +
                            (file.error ? '<strong class="error text-danger"></strong>' : '') +
                            '</td>' +
                            '<td><span class="size"></span></td>' +
                            '<td>' +
                            (file.deleteUrl ? '<button class="btn btn-danger delete">' +
                                    '<i class="glyphicon glyphicon-trash"></i> ' +
                                    '<span>${deleteText}</span>' +
                                    '</button>' : '') +
                            '<button class="btn btn-warning cancel">' +
                            '<i class="glyphicon glyphicon-ban-circle"></i> ' +
                            '<span>${clearText}</span>' +
                            '</button>' +
                            '</td>' +
                            '</tr>');
                    row.find('.name').text(file.name);
                    row.find('.size').text(o.formatFileSize(file.size));
                    if (file.error) {
                        row.find('.error').text(file.error);
                    }
                    if (file.deleteUrl) {
                        row.find('button.delete')
                                .attr('data-type', file.deleteType)
                                .attr('data-url', file.deleteUrl);
                    }
                    rows = rows.add(row);
                });
                return rows;
            }
        });

    });
</script>

Exemples de gestionnaires de demandes de téléchargement et de suppression

    @PostMapping("/app/uploadResources")
public @ResponseBody
Map<String, List<FileUploadResponse>> uploadResources(MultipartHttpServletRequest request,
        Locale locale) {
    //https://github.com/jdmr/fileUpload/blob/master/src/main/java/org/davidmendoza/fileUpload/web/ImageController.java
    //https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#using-jquery-file-upload-ui-version-with-a-custom-server-side-upload-handler
    Map<String, List<FileUploadResponse>> response = new HashMap<>();
    List<FileUploadResponse> fileList = new ArrayList<>();

    String deleteUrlBase = request.getContextPath() + "/app/deleteResources.do?filename=";

    //http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/multipart/MultipartRequest.html
    Iterator<String> itr = request.getFileNames();
    while (itr.hasNext()) {
        String htmlParamName = itr.next();
        MultipartFile file = request.getFile(htmlParamName);
        FileUploadResponse fileDetails = new FileUploadResponse();
        String filename = file.getOriginalFilename();
        fileDetails.setName(filename);
        fileDetails.setSize(file.getSize());
        try {
            String message = saveFile(file);
            if (message != null) {
                String errorMessage = messageSource.getMessage(message, null, locale);
                fileDetails.setError(errorMessage);
            } else {
                //save successful
                String encodedFilename = URLEncoder.encode(filename, "UTF-8");
                String deleteUrl = deleteUrlBase + encodedFilename;
                fileDetails.setDeleteUrl(deleteUrl);
            }
        } catch (IOException ex) {
            logger.error("Error", ex);
            fileDetails.setError(ex.getMessage());
        }

        fileList.add(fileDetails);
    }

    response.put("files", fileList);

    return response;
}

@PostMapping("/app/deleteResources")
public @ResponseBody
Map<String, List<Map<String, Boolean>>> deleteResources(@RequestParam("filename") List<String> filenames) {
    Map<String, List<Map<String, Boolean>>> response = new HashMap<>();
    List<Map<String, Boolean>> fileList = new ArrayList<>();

    String templatesPath = Config.getTemplatesPath();
    for (String filename : filenames) {
        Map<String, Boolean> fileDetails = new HashMap<>();

        String cleanFilename = ArtUtils.cleanFileName(filename);
        String filePath = templatesPath + cleanFilename;

        File file = new File(filePath);
        boolean deleted = file.delete();

        if (deleted) {
            fileDetails.put(cleanFilename, true);
        } else {
            fileDetails.put(cleanFilename, false);
        }

        fileList.add(fileDetails);
    }

    response.put("files", fileList);

    return response;
}

Exemple de classe pour générer la réponse json requise

    public class FileUploadResponse {
    //https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#using-jquery-file-upload-ui-version-with-a-custom-server-side-upload-handler

    private String name;
    private long size;
    private String error;
    private String deleteType = "POST";
    private String deleteUrl;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the size
     */
    public long getSize() {
        return size;
    }

    /**
     * @param size the size to set
     */
    public void setSize(long size) {
        this.size = size;
    }

    /**
     * @return the error
     */
    public String getError() {
        return error;
    }

    /**
     * @param error the error to set
     */
    public void setError(String error) {
        this.error = error;
    }

    /**
     * @return the deleteType
     */
    public String getDeleteType() {
        return deleteType;
    }

    /**
     * @param deleteType the deleteType to set
     */
    public void setDeleteType(String deleteType) {
        this.deleteType = deleteType;
    }

    /**
     * @return the deleteUrl
     */
    public String getDeleteUrl() {
        return deleteUrl;
    }

    /**
     * @param deleteUrl the deleteUrl to set
     */
    public void setDeleteUrl(String deleteUrl) {
        this.deleteUrl = deleteUrl;
    }

}

Voir https://pitipata.blogspot.co.ke/2017/01/using-jquery-file-upload-ui.html

Timothy Anyona
la source