JQuery или JavaScript: получить MIME-тип клиентского файла - PullRequest
23 голосов
/ 03 января 2011

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

Ответы [ 3 ]

31 голосов
/ 03 января 2011

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


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

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

Пример

http://jsbin.com/akati3/2

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

5 голосов
/ 03 января 2011

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

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

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

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

4 голосов
/ 28 июля 2013

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

...