HTML Input = "file" Принять тип файла атрибута (CSV)
У меня есть объект загрузки файла на моей странице:
<input type="file" ID="fileSelect" />
со следующими файлами Excel на моем рабочем столе:
- file1.xlsx
- file1.xls
- file.csv
Я хочу, чтобы загрузка файла ТОЛЬКО показывала файлы .xlsx
, .xls
и .csv
.
Используя атрибут accept
, я обнаружил, что эти типы контента позаботились о расширениях .xlsx
и .xls
...
accept
= application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(.XLSX)
accept
= приложение /vnd.ms-Excel (.XLS)
Однако я не могу найти правильный тип содержимого для файла Excel CSV! Какие-либо предложения?
ПРИМЕР: http://jsfiddle.net/LzLcZ/
Ответы
Ответ 1
Хорошо, это смущает... Я нашел решение, которое искал, и это не могло быть проще. Для получения желаемого результата я использовал следующий код. Надеюсь, это поможет кому-то в будущем. Спасибо всем за вашу помощь.
<input id="fileSelect" type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />
Допустимые типы приема:
Для файлов CSV (.csv) используйте:
<input type="file" accept=".csv" />
Для файлов Excel 97-2003 (.xls) используйте:
<input type="file" accept="application/vnd.ms-excel" />
Для файлов Excel 2007 + (.xlsx) используйте:
<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
Для текстовых файлов (.txt) используйте:
<input type="file" accept="text/plain" />
Для файлов изображений (.png/.jpg/etc) используйте:
<input type="file" accept="image/*" />
Для HTML файлов (.htm,.html) используйте:
<input type="file" accept="text/html" />
Для видеофайлов (.avi,.mpg,.mpeg,.mp4) используйте:
<input type="file" accept="video/*" />
Для аудиофайлов (.mp3,.wav и т.д.) используйте:
<input type="file" accept="audio/*" />
Для PDF файлов используйте:
<input type="file" accept=".pdf" />
DEMO:
http://jsfiddle.net/dirtyd77/LzLcZ/144/
ПРИМЕЧАНИЕ:
Если вы пытаетесь отобразить файлы CSV Excel (.csv
), используйте НЕ:
-
text/csv
-
application/csv
-
text/comma-separated-values
(работает только в Opera).
Если вы пытаетесь отобразить определенный тип файла (например, WAV
или PDF
), тогда это почти всегда будет работать...
<input type="file" accept=".FILETYPE" />
Ответ 2
В эти дни вы можете просто использовать расширение файла
<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>
Ответ 3
Dom этот атрибут очень старый и не принят в современных браузерах, насколько я знаю, но вот альтернатива этому, попробуйте это
<script type="text/javascript" language="javascript">
function checkfile(sender) {
var validExts = new Array(".xlsx", ".xls", ".csv");
var fileExt = sender.value;
fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
if (validExts.indexOf(fileExt) < 0) {
alert("Invalid file selected, valid files are of " +
validExts.toString() + " types.");
return false;
}
else return true;
}
</script>
<input type="file" id="file" onchange="checkfile(this);" />
Я думаю, это поможет вам, конечно, вы можете изменить этот script в соответствии с вашими потребностями.
Ответ 4
Я использовал text/comma-separated-values
для CSV mime-type в атрибуте accept, и он отлично работает в Opera. Пробовал text/csv
без везения.
Некоторые другие MIME-типы для CSV, если предложенные не работают:
- текст/значения, разделенные запятыми
- текст /CSV
- приложение /CSV
- application/excel
- application/vnd.ms-excel
- приложение /vnd.msexcel
- Текст /anytext
Источник: http://filext.com/file-extension/CSV
Ответ 5
Это не сработало для меня в Safari 10:
<input type="file" accept=".csv" />
Мне пришлось написать это вместо:
<input type="file" accept="text/csv" />
Ответ 6
Вы можете узнать правильный тип содержимого для любого файла, просто выполнив следующие действия:
1) Выберите интересующий файл,
2) И запустите консоль:
console.log($('.file-input')[0].files[0].type);
Вы также можете установить для вашего ввода атрибут "multiple" для проверки типа содержимого для нескольких файлов за раз и выполните следующее:
for (var i = 0; i < $('.file-input')[0].files.length; i++){
console.log($('.file-input')[0].files[i].type);
}
Признак атрибута имеет некоторые проблемы с несколькими атрибутами и не работает корректно в этом случае.
Ответ 7
Я изменил решение @yogi. Кроме того, когда файл имеет неправильный формат я reset значение входного элемента.
function checkFile(sender, validExts) {
var fileExt = sender.value;
fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
if (validExts.indexOf(fileExt) < 0 && fileExt != "") {
alert("Invalid file selected, valid files are of " +
validExts.toString() + " types.");
$(sender).val("");
return false;
}
else return true;
}
У меня есть настраиваемая верификация, потому что в открывшемся окне файла пользователь все равно может выбрать опции "Все файлы (" * ")", независимо от того, явно ли я установлен атрибут accept в элементе ввода.
Ответ 8
Теперь вы можете использовать новый атрибут проверки ввода html5 pattern=".+\.(xlsx|xls|csv)"
.
Ответ 9
использование регулярного выражения будет быстрее
function checkIsExcel(file) {
if ((!/.*\.xlsx$/.test(file.name)) && (!/.*\.xls$/.test(file.name)) && (!/.*\.csv$/.test(file.name))) {
return false;
}
return true;
}