2014-11-17 6 views
-1

Расширение файла для загрузки в HTML-форме может быть проверена с помощью JQuery в Valdation плагин:Исследовать Тип файла (не Extension) перед загрузкой

<form enctype="multipart/form-data" id="form-id"> 
    <input type="file" name="file-id" id="file-id" /> 
</form> 

Это может быть подтверждено JQuery в Validation Plugin с помощью A править

$("#form-id").validate({ 
    rules: { 
     file-id: { 
      extension: ["jpg","png","gif"] 
     } 
}); 

для нашего использования, простая проверка расширения не является достаточным, поскольку пользователи, как правило, переименовывать Graphics свои файлы перед загрузкой без их преобразования. Например. мы извлекаем PDF-графику, которую невозможно преобразовать, например. png's by libgd.

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

+0

@stefan Большинство файловых форматов имеют некоторый идентификатор/заголовок в начале файла, поэтому загружайте сначала, например, 128 байт (или больше зависит от максимального необходимого смещения от всех поддерживаемых форматов файлов) и проверяйте каждый поддерживаемый тип файла, если найден ID то все ОК, если нет, то выбросьте его как неправильный файл .... (google fileformat для каждого типа файлов, который вам нужен там, вы найдете все, что вам нужно ...) – Spektre

ответ

1

Что вы ищете, это MIME-тип файла.

Если вы используете HTML выбора файлов вы можете получить тип с помощью:

document.getElementById('fileChooserID').files[0].type 

Обратите внимание, что это будет проверять тип MIME в стороне клиента, поэтому он не будет достаточно. Вы не можете доверять только стороне клиента для проверки. На стороне сервера вы должны проверить запрос content-type, расположенный по запросу HEAD.

2

Да, это возможно (или может быть возможно в зависимости от конкретного браузера). HTML File API позволяет вам получить MIME-тип файла. Смотрите статью Reading files in JavaScript using the File APIs для деталей, но основная идея заключается в следующем:

Для входного файла элемента:

<input type="file" id="file-input"> 

Вы можете получить FileList объект, объект File (s) из того, каждый из который имеет свойство типа, который определяется типом MIME:

$("#file-input").on("change", function (evt) { 
    var files = evt.target.files; 
    $.each(files, function (i, file) { 
     if (file.type === "image/jpeg") { 
      alert("It's a JPEG"); 
     } 
     else if (file.type === "image/png") { 
      alert("It's a PNG"); 
     } 
     else { 
      alert('The file MIME type is "' + file.type + '"'); 
     } 
    }); 
}); 

Если вам необходимо выйти за пределы типа MIME, вы можете открыть и прочитать содержимое файла через FileReader API. Метод readAsArrayBuffer предоставит вам содержимое файла в виде массива типизированных байтов.

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