2015-08-26 1 views
3

Я хочу, чтобы загрузить файл, как это:загрузки файла: проверьте, если изображение правильного

<input type="file" name="uploadPicture"/> 

Есть ли способ, чтобы выяснить, в JavaScript, если выбранный файл является действительным изображением?

Я знаю, что могу проверить расширение файла. Проблема в том, что кто-то может изменить файл .txt на .jpg, и он пройдет проверку.

+0

Как вы собираетесь загрузить его? Может быть, вы можете проверить его на стороне сервера? Или вы можете загрузить изображение в API файлов HTML и проверить тип mime. – putvande

ответ

5

Во-первых, добавить accept="image/*" на ввод данных, чтобы принимать только файлы изображений

<input type="file" name="uploadPicture" accept="image/*" onChange="validateAndUpload(this);"/> 

Во-вторых, вы можете создать объект изображения, чтобы увидеть, если это истинный образ

function validateAndUpload(input){ 
    var URL = window.URL || window.webkitURL; 
    var file = input.files[0]; 

    if (file) { 
     var image = new Image(); 

     image.onload = function() { 
      if (this.width) { 
       console.log('Image has width, I think it is real image'); 
       //TODO: upload to backend 
      } 
     }; 

     image.src = URL.createObjectURL(file); 
    } 
};​ 
+0

Как насчет не jQuery? – putvande

+0

@putvande спасибо за комментарий. Отредактированный мой ответ –

+1

это не работает. вам также необходимо подписаться на событие onerror. onload будет вызываться только в том случае, если изображение действительно. – Assassinbeast

4

Спасибо Arūnas Smaliukas. Ваш ответ приблизил меня к тому, что я хотел.

Image.onload будет вызываться только в том случае, если файл является допустимым. Таким образом, нет необходимости проверять this.width в обратном вызове onload().

Чтобы обнаружить, что это недопустимое изображение, вы можете использовать Image.onerror.

$().ready(function() { 
 
    $('[type="file"]').change(function() { 
 
    var fileInput = $(this); 
 
    if (fileInput.length && fileInput[0].files && fileInput[0].files.length) { 
 
     var url = window.URL || window.webkitURL; 
 
     var image = new Image(); 
 
     image.onload = function() { 
 
     alert('Valid Image'); 
 
     }; 
 
     image.onerror = function() { 
 
     alert('Invalid image'); 
 
     }; 
 
     image.src = url.createObjectURL(fileInput[0].files[0]); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="file" />

+0

Это лучший ответ – Lemmy4555

Смежные вопросы