HTML: Как ограничить загрузку файлов только изображениями? - PullRequest
111 голосов
/ 13 октября 2009

С помощью HTML, как я могу ограничить, какие типы файлов могут быть загружены?

Чтобы упростить работу с пользователем, я хочу ограничить загрузку файлов только изображениями (jpeg, gif, png).

<form method="post" action="..." enctype="multipart/form-data">
<label for="image">Photo</label>
<input name="image" type="file" />
</form>

Ответы [ 8 ]

214 голосов
/ 13 октября 2009

HTML5 говорит <input type="file" accept="image/*">. Конечно, никогда не доверяйте проверке на стороне клиента: всегда проверяйте снова на стороне сервера ...

77 голосов
/ 16 июня 2012

HTML5 Ввод файла имеет атрибут accept, а также множественный атрибут. Используя несколько атрибутов, вы можете загрузить несколько изображений в одном экземпляре.

<input type="file" multiple accept='image/*'>

Вы также можете ограничить несколько типов пантомимы.

<input type="file" multiple accept='image/*|audio/*|video/*' >

и другой способ проверки типа MIME с помощью файлового объекта.

объект файла дает вам имя, размер и тип.

var files=e.target.files;

var mimeType=files[0].type; // You can get the mime type

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

6 голосов
/ 13 октября 2009

Отредактированный

Если бы вещи были такими, какими они ДОЛЖНЫ быть, вы могли бы сделать это через атрибут "Принять".

http://www.webmasterworld.com/forum21/6310.htm

Однако браузеры в значительной степени игнорируют это, так что это не имеет значения. Короткий ответ: я не думаю, что есть способ сделать это в HTML. Вместо этого вам придется проверить это на стороне сервера.

Следующий пост содержит информацию, которая может помочь вам с альтернативами.

Атрибут ввода файла 'accept' - это полезно?

5 голосов
/ 28 июня 2016

Вот HTML-код для загрузки изображения. По умолчанию он показывает файлы изображений только в окне просмотра, потому что мы поставили accept="image/*". Но мы все равно можем изменить его из выпадающего списка, и он покажет все файлы. Таким образом, часть Javascript проверяет, является ли выбранный файл фактическим изображением.

 <div class="col-sm-8 img-upload-section">
     <input name="image3" type="file" accept="image/*" id="menu_images"/>
     <img id="menu_image" class="preview_img" />
     <input type="submit" value="Submit" />
 </div> 

Здесь, на событии изменения, мы сначала проверяем размер изображения. И во втором if состоянии мы проверяем, является ли это файлом изображения.

this.files[0].type.indexOf("image") будет -1, если это не файл изображения.

document.getElementById("menu_images").onchange = function () {
    var reader = new FileReader();
    if(this.files[0].size>528385){
        alert("Image Size should not be greater than 500Kb");
        $("#menu_image").attr("src","blank");
        $("#menu_image").hide();  
        $('#menu_images').wrap('<form>').closest('form').get(0).reset();
        $('#menu_images').unwrap();     
        return false;
    }
    if(this.files[0].type.indexOf("image")==-1){
        alert("Invalid Type");
        $("#menu_image").attr("src","blank");
        $("#menu_image").hide();  
        $('#menu_images').wrap('<form>').closest('form').get(0).reset();
        $('#menu_images').unwrap();         
        return false;
    }   
    reader.onload = function (e) {
        // get loaded data and render thumbnail.
        document.getElementById("menu_image").src = e.target.result;
        $("#menu_image").show(); 
    };

    // read the image file as a data URL.
    reader.readAsDataURL(this.files[0]);
};
1 голос
/ 13 октября 2009

Вы можете сделать это безопасно только на стороне сервера. Использование атрибута accept приемлемо, но его также следует проверять на стороне сервера, чтобы пользователи не могли выполнить cURL к вашему сценарию без этого ограничения.

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

0 голосов
/ 11 октября 2016
<script>

    function chng()
    {
        var typ=document.getElementById("fiile").value;
        var res = typ.match(".jp");

        if(res)
        {
            alert("sucess");
        }
        else
        {
            alert("Sorry only jpeg images are accepted");
            document.getElementById("fiile").value="; //clear the uploaded file
        }
    }

</script>

Теперь в html-части

<input type="file" onchange="chng()">

этот код проверяет, является ли загруженный файл файлом jpg или нет, и ограничивает загрузку других типов

0 голосов
/ 14 апреля 2011

Оформить заказ на проект Uploadify. http://www.uploadify.com/

Это загрузчик файлов на основе Flash + jQuery. При этом используется диалог выбора файлов Flash, который дает вам возможность фильтровать типы файлов, выбирать несколько файлов одновременно и т. Д.

0 голосов
/ 13 октября 2009

В конечном итоге фильтр, отображаемый в окне «Обзор», устанавливается браузером. Вы можете указать все фильтры, которые вы хотите, в атрибуте Accept, но у вас нет гарантии, что браузер вашего пользователя будет придерживаться его.

Лучше всего выполнить фильтрацию в серверной части сервера.

...