2014-10-09 4 views
0

Я разрабатываю плагин для предварительного просмотра и обрезки изображения перед загрузкой. Я столкнулся с одной интересной ошибкой.Проверить тип файла перед загрузкой

Я проверяю расширение файла до определенного, если это изображение. Но один из моих пользователей просто меняет расширение текстового файла в Total Commander и пытается его загрузить.

Это часть кода:

reader.onload = function(e) { 
    if(e.target.result.indexOf("data:image")) { //check if file have an image extension 
    return false; 
    } 
    var image = new Image(); 
    image.src = e.target.result; 
    image.onload = function() { 
    // Never have been triggered if user tries to upload text file with *.jpg  extension 
    } 
} 

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

ответ

2

Если вы полагаетесь на расширение файла, это не достаточно для вас, можно проверить первые байты файла и проверить некоторые общие заголовки.

это первые байты

  • JPEG: FF D8
  • GIF: 47 49 46
  • PNG: xx 80 78 71

см: http://www.mikekunz.com/image_file_header.html & http://www.libpng.org/pub/png/book/chapter08.html#png.ch08.div.2

вы можете прочитать байты у петь File API: HTML5 File API read as text and binary

с учетом того, что проверка клиента на стороне клиента по-прежнему может быть изменена на клиенте. так что вам нужно будет повторно проверить сервер. поэтому, вероятно, достаточно просто проверить расширение на клиенте. пользователь, который активно пытается загрузить не-образ, может обойти обе проверки клиента.

+1

Hardcore =) У меня есть проверка на стороне сервера. Но если пользователь пытается загрузить «неправильный» файл, он не может просмотреть предварительный просмотр. Это может смутить пользователя, потому что я хочу поймать этот случай. Но я думаю, что это не настоящая ситуация =) Спасибо за ур ответ, я попробую ваше решение. – Srw

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