jQuery или JavaScript: получить MIME-тип клиентского файла

Я хотел бы определить тип файла MIME на стороне клиента моего приложения с помощью jQuery или JavaScript. Есть ли способ сделать это? Спасибо.


person SZH    schedule 03.01.2011    source источник


Ответы (3)


Вы можете использовать AJAX, сделать запрос HEAD и проверить заголовки ответа на наличие заголовка Content-type. Но это работает, только если вы получаете файл с HTTP-сервера.


Чтобы получить MIME-тип файла, выбранного с помощью средства выбора файлов HTML, ничего не отправляя, попробуйте:

document.getElementById('fileChooserID').files[0].type // e.g. image/png

Пример

http://jsbin.com/akati3/2

Попробуйте выбрать изображение, проверьте тип MIME и попробуйте отправить его. Затем попробуйте что-то еще, кроме изображения.

person Delan Azabani    schedule 03.01.2011
comment
Итак, вы имеете в виду: разрешить пользователю выбирать файл в средстве выбора файлов, но, ничего не отправляя, определить тип MIME? Я отредактирую свой ответ, чтобы разрешить это. - person Delan Azabani; 03.01.2011
comment
Извините, наверное, я недостаточно хорошо объяснил. Пользователь вводит URL-адрес изображения, начинающегося с файла://, и изображение отображается на странице с использованием тега ‹img›. Я хочу знать тип MIME, чтобы убедиться, что это действительное изображение. - person SZH; 03.01.2011
comment
О, конечно, мой второй ответ делает именно то, что вы хотите. Дай мне пару минут; Я напишу демо. - person Delan Azabani; 03.01.2011
comment
Единственная проблема заключается в том, что я использую не ввод файла, а текстовое поле для URL-адреса, похожее на поле URL-адреса в браузере. - person SZH; 03.01.2011
comment
Если вы используете текстовое поле, по соображениям безопасности браузер не предоставляет никакой информации об имени файла (и даже не обрабатывает его как запись файла). Единственный известный мне способ получить такую ​​информацию из браузера — это использовать ввод файла и немного JavaScript. - person Delan Azabani; 03.01.2011
comment
Обратите внимание, что это не работает в IE 9 и ниже. Однако он работает в предварительных версиях платформы IE 10. - person Andy E; 31.10.2011

Единственный способ надежно определить MIME-тип — это проанализировать файл на стороне сервера, чтобы убедиться, что это именно тот тип, который утверждает пользователь, или что он соответствует списку разрешенных типов. . Что следует учитывать:

1 — JavaScript имеет ограниченный доступ к локальной файловой системе, и на то есть веские причины.

2 - Вы не можете доверять MIME-типу, полученному из браузера. Он не обязательно будет соответствовать MIME-типу отправленного файла.

3 - В ситуации, когда пользователю разрешено загружать файлы, которые соответствуют «белому списку» разрешенных типов, проверка, вероятно, необходима в любом случае, учитывая, что приложению, возможно, придется что-то делать с файлом помимо их сохранения, что было бы в по крайней мере, включать анализ их заголовков для получения такой информации, как длина тиража (для видео), номер версии (для документа Word) и так далее.

person karim79    schedule 03.01.2011
comment
Это очень верно. Наполовину умный пользователь, желающий обмануть сервер, может подделать тип MIME. Сервер всегда должен дважды проверять тип файла с помощью магии. - person Delan Azabani; 03.01.2011

идея НЕ заключается в доверии к браузеру. Идея состоит в том, чтобы выполнить эту проверку на стороне сервера, но какая полезная вещь, если перед отправкой файла размером 20 МБ в браузер, а затем будет отклонен, потому что правило на сервере... так что, рекомендуется «предварительно проверить», является ли этот файл «кандидатом» для загрузки, окончательная проверка будет выполнена на сервере.

person christian    schedule 28.07.2013