Странное поведение функции acceptDimensions (не) работает по-разному для изображений (jpg) и других форматов файлов - PullRequest
0 голосов
/ 25 мая 2020

Я думаю, что в DropZone есть ошибка или, по крайней мере, странное поведение. Я установил стандартный DZ следующим образом:

Dropzone.options.imgUploadForm = {
    autoProcessQueue: false,
    autoDiscover: false,

    init: function() {
        myDropzone = this; // closure
        var fileCount = 0;
        var minImgSize = 2048;
        var fileRes = [];

        this.on("maxfilesexceeded", function(file) { alert("Too many files to upload: "+file); });
        this.on("success", function(file, responseText) {
            fileCount++;
            fileRes.push(responseText);
        });
        this.on("error", function(file, message) { 
                console.log(message);
                alert(file.name+"\n-------------\n"+message);
                // this.removeFile(file); 
        });

        this.on("complete", function(file) {
            myDropzone.removeFile(file);
        });

        this.on("thumbnail", function(file) {
            var fileName = file.name;
            var stat = file.status;
            var ext = fileName.substr(fileName.lastIndexOf('.')+1);
            if (ext == 'jpg') {
                if (file.width < minImgSize || file.height < minImgSize)    // Do the dimension checks you want to do
                    file.rejectDimensions();
                else
                    file.acceptDimensions();
            }
        });
    },

    accept: function(file, done) {
        var fileName = file.name;
        var ext = fileName.substr(fileName.lastIndexOf('.')+1);
        file.acceptDimensions = done;
        file.rejectDimensions = function () { done("Invalid dimensions (minimum size be must be: "+minImgSize+" px"); };
    },

    maxFiles: 200,
    parallelUploads: 20,
    maxFilesize: 2000, /* MB */
    timeout: 300000,
    /*acceptedFiles: "application/*",*/
    addRemoveLinks: true,
    dictRemoveFile: "Remove",
    dictFileTooBig: "Image is too heavy @{{filesize}} MB!\n\Max @{{maxFilesize}} MB allowed.",
    dictDefaultMessage: "<b>Drop images here</b>",
};

Это работает правильно при загрузке изображений, но другие типы файлов не загружаются. Попробовав все возможные решения, я придумал следующий код в функции ' accept ', который, хотя и очень странно, работает:

file.acceptDimensions = ext == 'jpg' ? done : done();

Вместо того, чтобы просто устанавливать ' acceptDimensions '= done Я установил done () для «других» типов файлов. Конечно, это больше похоже на патч, чем на решение, но оно работает, мне просто было бы любопытно понять, почему. Спасибо всем, у кого есть терпение и навыки, чтобы придумать объяснение и, возможно, исправление.

...