Проверка файлов javascript всегда возвращает false

У меня есть функция, которая является частью загрузки файла, однако, когда я пытаюсь проверить файлы с помощью массива, если я использую «принятый» файл или «неправильный» файл, я получаю тот же конечный результат, что и предупреждающее сообщение на возвращение ложного утверждения кода.

может кто-нибудь заметить здесь ошибку? в функции нет синтаксических ошибок.

handleFiles = function (files,e){
var rand = Math.floor((Math.random()*100000)+3);

for(var i=0, file; file = files[i]; i++) {

var fileType = new Array("psd","ai","eps","svg","png","doc","docx","jpg","jpeg","pptx","ppt","gif");
var file_extension = file.name.split('.').pop().toLowerCase();

if (parseInt(file.size / 1024) > 204800) {  
    alert("Filen er \""+file.name+"\" for stor");
    return false;   
}
    if (fileType[i]==file_extension)
    {
        var src = '/printuploads/upload.png'

        var template = '<div class="eachImage" id="'+rand+'">';
        template += '<span class="preview" id="'+rand+'"><img src="'+src+'"><span class="overlay"><span class="updone"></span></span>';
        template += '</span>'
        template += '<div class="progress" id="'+rand+'"><span></span></div>';  

        if($("#dropbox .eachImage").html() == null)
        $("#dropbox").html(template);
        else
        $("#dropbox").append(template);

        upload(file,rand);
        return true;
    }
    alert("Forkert filformat");
    return false;
}
};
if (fileType[i]==file_extension) - Вероятно, в этом проблема. Вы ожидаете, что n-й файл в массиве files будет иметь n-е расширение в вашем массиве fileType.
Máté Safranka 11.04.2018 12:03

Кроме того, вы должны переместить определение массива fileType за пределы цикла. Это не ошибка, но он без необходимости создает один и тот же массив снова и снова.

Máté Safranka 11.04.2018 12:04
0
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проверка, чтобы проверить, поддерживается ли расширение файла, неверна:

fileType[i]==file_extension

Здесь i - это индекс файла, а не расширение. Таким образом, каждое расширение файла сравнивается с «psd».

Вместо этого следует проверить, доступно ли расширение в массиве file_extension. Вы можете сделать это с помощью метода Array#some:

fileType.some(t => t == file_extension)

Или вы можете просто проверить принадлежность расширения к массиву с помощью indexOf:

fileType.indexOf(file_extension) >= 0

Вот рабочий фрагмент, вы можете проверить зарегистрированное значение в консоли:

var handleFiles = function(files, e) {
  var rand = Math.floor((Math.random() * 100000) + 3);

  for (var i = 0, file; file = files[i]; i++) {

    var fileType = new Array("psd", "ai", "eps", "svg", "png", "doc", "docx", "jpg", "jpeg", "pptx", "ppt", "gif");
    var file_extension = file.name.split('.').pop().toLowerCase();

    if (parseInt(file.size / 1024) > 204800) {
      alert("Filen er \"" + file.name + "\" for stor");
      return false;
    }
    
    if (fileType.some(t => t == file_extension)) {
      console.log("Extension matches");
      var src = '/printuploads/upload.png'

      var template = '<div class="eachImage" id="' + rand + '">';
      template += '<span class="preview" id="' + rand + '"><img src="' + src + '"><span class="overlay"><span class="updone"></span></span>';
      template += '</span>'
      template += '<div class="progress" id="' + rand + '"><span></span></div>';

      if ($("#dropbox .eachImage").html() == null)
        $("#dropbox").html(template);
      else
        $("#dropbox").append(template);

      upload(file, rand);
      return true;
    }
    alert("Forkert filformat");
    return false;
  }
};

function upload() {};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type ="file" onchange="handleFiles(this.files, event);">

Другие вопросы по теме