Расширения фильтра при загрузке HTML-формы

У меня есть простая форма загрузки HTML, и я хочу указать расширение по умолчанию (например, «* .drp»). Я читал, что это можно сделать с помощью атрибута ACCEPT входного тега, но я не знаю, как именно.

<form enctype = "multipart/form-data" action = "uploader.php" method = "POST">
Upload DRP File:
<input name = "Upload Saved Replay" type = "file" accept = "*.drp"/><br />
<input type = "submit" value = "Upload File" />
</form>

Редактировать Я знаю, что проверка возможна с использованием javascript, но я бы хотел, чтобы пользователь видел только файлы «.drp» во всплывающем диалоговом окне. Кроме того, меня не особо волнует проверка на стороне сервера в этом приложении.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
42
0
109 742
7

Ответы 7

Атрибут accept ожидает типы MIME, а не маски файлов. Например, чтобы принимать изображения PNG, вам потребуется accept = "image / png". Возможно, вам потребуется выяснить, какой тип MIME браузер считает вашим типом файла, и использовать его соответственно. Однако, поскольку файл «drp» не выглядит стандартным, мощь должен принимать общий тип MIME.

Кроме того, похоже, что большинство браузеров может не соблюдать этот атрибут.

Лучше всего фильтровать загрузку файлов на стороне сервера. Это неудобно, поскольку случайный пользователь может тратить время на загрузку файла только для того, чтобы узнать, что он выбрал не тот, но, по крайней мере, у вас будет некоторая форма целостности данных.

В качестве альтернативы вы можете выполнить быструю проверку с помощью JavaScript перед отправкой формы. Просто проверьте расширение значения поля файла, чтобы убедиться, что это «.drp». Вероятно, он будет поддерживаться в большей степени, чем атрибут accept.

Полезный совет: вся эта цепочка - это лучшая часть десятилетней давности. Не совсем свежая информация о том, что в основном поддерживается, а что нет.

Brian Cline 08.04.2015 10:25

Подожди, а где мой комментарий? Как вы его удалили?

Pacerier 11.04.2015 20:12

К сожалению, по состоянию на декабрь 2015 года все выглядит довольно актуальным. Атрибут по-прежнему не поддерживается. Я даю ему дюжину типов содержимого шрифтов MIME, и единственный, который он распознает, - это .woff. TTF и другие типы шрифтов не распознаются. На самом деле глупо, что для сборщика файлов они, хотя типы MIME были бы более подходящими, чем расширения файлов. Типы MIME бесполезны, потому что средство выбора файлов фильтрует по расширению файла, а не по типу MIME, и не может проверить тип MIME или даже распознать 1/10 тех, которые я ему предоставил. Какое жалкое состояние.

Triynko 14.12.2015 18:17

Атрибут accept определяет список типов содержимого (типов MIME), разделенных запятыми, которые целевой объект формы будет обрабатывать правильно. К сожалению, этот атрибут игнорируется всеми основными браузерами, поэтому он никоим образом не влияет на файловый диалог браузера.

accept=.csv у меня работает ............
Pacerier 08.04.2015 06:19

Вы можете сделать это с помощью javascript. Возьмите значение поля формы в своей функции отправки, проанализируйте расширение.

Начать можно примерно так:

<form name = "someform"enctype = "multipart/form-data" action = "uploader.php" method = "POST">
<input type=file name = "file1" />
<input type=button onclick = "val()" value = "xxxx" />
</form>
<script>
function val() {
    alert(document.someform.file1.value)
}
</script>

Я согласен с alexmac - тоже на стороне сервера.

Зачем использовать onclick вместо onchange?

Pacerier 08.04.2015 06:18

Я бы не стал использовать этот атрибут, поскольку большинство браузеров игнорируют его, как указывает CMS.

Обязательно используйте проверку на стороне клиента, но только в сочетании со стороной сервера. Можно обойти любую проверку на стороне клиента.

Немного не по теме, но некоторые люди проверяют тип содержимого, чтобы проверить загруженный файл. Вы должны быть осторожны с этим, так как злоумышленник может легко изменить его и, например, загрузить файл php. См. Пример по адресу: http://www.scanit.be/uploads/php-file-upload.pdf

Это просто удобство использования.

Pacerier 08.04.2015 06:19

Я использую javascript для проверки расширения файла. Вот мой код:

HTML

<input name = "fileToUpload" type = "file" onchange = "check_file()" >

.. ..

javascript

function check_file(){
                str=document.getElementById('fileToUpload').value.toUpperCase();
        suffix = ".JPG";
        suffix2 = ".JPEG";
        if (str.indexOf(suffix, str.length - suffix.length) == -1||
                       str.indexOf(suffix2, str.length - suffix2.length) == -1){
        alert('File type not allowed,\nAllowed file: *.jpg,*.jpeg');
            document.getElementById('fileToUpload').value='';
        }
    }

if (str.indexOf (суффикс, str.length - суффикс.length) == -1 && str.indexOf (суффикс2, str.length - suffix2.length) == -1)

Faiz 11.11.2014 06:29

@Nazri, однако это не уменьшает выбор, отображаемый пользователю в "проводнике загрузки файлов".

Pacerier 08.04.2015 06:16

Другое решение с несколькими строчками

function checkFile(i){
  i = i.substr(i.length - 4, i.length).toLowerCase();
  i = i.replace('.','');
  switch(i){
    case 'jpg':
    case 'jpeg':
    case 'png':
    case 'gif':
      // do OK stuff
      break;
    default:
      // do error stuff
      break;
  }
}

Для определенных форматов, таких как ваш ".drp". Вы можете напрямую передать это в accept = ". Drp", он будет работать для этого.

But without " * "

<input name = "Upload Saved Replay" type = "file" accept = ".drp" />
<br/>

Другие вопросы по теме