HTML Input = "файл" Прийняти тип файлу атрибутів (CSV)


501

На моїй сторінці є об’єкт завантаження файлів:

<input type="file" ID="fileSelect" />

зі наступними файлами excel на робочому столі:

  1. file1.xlsx
  2. file1.xls
  3. file.csv

Я хочу , щоб завантажити файл тільки показати .xlsx, .xls, & .csvфайли.

Використовуючи acceptатрибут, я виявив, що ці типи вмісту подбали про .xlsx& .xlsрозширення ...

accept= application / vnd.openxmlformats-officedocument.spreadsheetml.sheet (.XLSX)

accept= application / vnd.ms-excel (.XLS)

Однак я не можу знайти правильний тип вмісту для файлу CSV Excel! Будь-які пропозиції?

ПРИКЛАД: http://jsfiddle.net/LzLcZ/


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

9
@tletnes неправда, її підтримують більшість основних браузерів
Dom

Ви також можете спробувати це, якщо ($ .trim ($ ('# OriginalFileName'). Val ())! = "") {Var ext = $ ('# OriginalFileName'). Val (). Split ('.') .pop (). toLowerCase (); if ($ .inArray (ext, ['doc', 'docx', 'pdf', 'xlsx', 'xls']) == -1) {$ ('# OriginalFileNameValid'). html ('Використовувати .doc , .docx, .pdf файли '); }}
Нітін Пол

У випадку, якщо будь-які інші користувачі Ubuntu заплутаються у цьому, я виявив, що в Ubuntu Firefox за замовчуванням показує "Усі файли", але додає будь-який ваш атрибут "прийняти" до випадаючого файлу у діалоговому вікні вибору файлів.
млці

Відповіді:


1246

Ну, це бентежить ... Я знайшов рішення, яке шукав, і це не могло бути простішим. Я використовував наступний код, щоб отримати бажаний результат. Сподіваюся, це допоможе комусь у майбутньому. Дякуємо всім за допомогу.

<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 / тощо) використовуйте:

<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 ).

Якщо ви намагаєтеся відобразити певний тип файлу (наприклад, a WAVабо PDF), це майже завжди буде працювати ...

 <input type="file" accept=".FILETYPE" />

3
Схоже, Chrome підтримує цей атрибут, але Firefox над ним все ще працює. Ви можете проголосувати за цю помилку, щоб вони вирішили її швидше: bugzilla.mozilla.org/show_bug.cgi?id=826176
Salvatorelab

3
@DavidRouten атрибут accept буде просто фільтрувати типи файлів. Вам також доведеться використовувати перевірку файлів, щоб запобігти вибору інших типів файлів. Сподіваюся, що це допомагає!
Дом

1
<input type = "file" accept = ". csv" /> не працює у Firefox. Чи є якесь інше рішення зробити так, як це працює у Firefox.
Ганеса Віджаякумар

1
<input type="file" accept=".csv, text/csv" />працював на мене в Firefox, Chrome і Opera на mac. лише .csv працював не у всіх браузерах.
tmas

1
Чи можете ви додати приклад файлу "xml"? Це буде корисно. Заздалегідь спасибі.
ni8mr

161

У ці дні ви можете просто використовувати розширення файлу

<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>

3
Хоча дивно це (і альтернатива application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel) до сих пір не з'являється на роботу по лезу 41.16299.820.0 stackoverflow.com/questions/31875617 / ... wpdev.uservoice.com/forums/257854-microsoft-edge-developer / ...
SharpC

38

Дом цей атрибут дуже старий і не прийнятий у сучасних браузерах, наскільки я знаю, але ось альтернатива цьому. Спробуйте це

<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);" />

Я думаю, це допоможе вам, звичайно, ви можете змінити цей сценарій відповідно до ваших потреб.


5
Холодне рішення, але я не розумію, чому такий атрибут вважається "старим". Це основна функція вибору файлів майже для кожної ОС, браузери повинні зробити все можливе, щоб вона працювала, і це допомогло б багатьом користувачам ...
Christophe Roussy

1
Атрибут accept не старий і підтримується в основних браузерах, за винятком IE / Edge: caniuse.com/#feat=input-file-accept . Будь ласка, перефразуйте свою відповідь, оскільки вона є помилковою.
thomaux

2
Найважливішим аспектом acceptатрибута є підказка, яку він надає до діалогового вікна відкритого файлу. Користувачеві слід запропонувати відповідні файли за замовчуванням, імовірно, з можливістю вибору інших типів, якщо вони бажають - саме так поводиться зараз більшість сучасних браузерів.
Кодерер

13

Я використовував text/comma-separated-valuesдля CSV mime-type в атрибуті accept, і він прекрасно працює в Opera. Спробував text/csvбез везіння.

Деякі інші типи MIME для CSV, якщо запропоновані не працюють:

  • текст / знаки, розділені комами
  • текст / csv
  • додаток / csv
  • заявка / відмінність
  • застосування / vnd.ms-excel
  • додаток / vnd.msexcel
  • текст / будь-який текст

Джерело: http://filext.com/file-extension/CSV


1
Привіт Дому! Я хочу сказати, що вибачте, тому що ваша відповідь (позначена як правильна) в порядку, і я не маю багато уваги на неї раніше, тому що я тестував сайт лише в Opera. Після тестування в інших веб-переглядачах я бачу, що ви відповідаєте більш повно. Але це працює не у всіх браузерах. Firefox 17 не підтримує приймати attr як фільтр у діалоговому вікні файлів ( bugzilla.mozilla.org/show_bug.cgi?id=83749#c14 ), тому ця властивість є для мене підозрілою. Я все одно буду використовувати перевірку файлів javascript, але використовую text / csv in accept attr, оскільки це за замовчуванням IANA iana.org/assignments/media-types
jaysponsored

11

У Safari 10 це не працювало для мене:

<input type="file" accept=".csv" />

Я повинен був написати це замість цього:

<input type="file" accept="text/csv" />

Привіт ,,, він добре працює і на моєму сафарі. Але як, якщо ми хочемо прийняти документи excel? у вас є якісь підказки? @trojan
gustav

Перевірте відповідь великих грошей. TLDR; <input type = "file" ID = "fileSelect" accept = ". xlsx, .xls, .csv" />
Sk. Ірфан

4

Ви можете знати правильний тип вмісту для будь-якого файлу, виконавши наступне:

1) Виберіть зацікавлений файл,

2) І запустіть у консолі це:

console.log($('.file-input')[0].files[0].type);

Ви також можете встановити атрибут "кілька" для вашого вводу, щоб перевірити тип вмісту для декількох файлів одночасно і зробити наступне:

for (var i = 0; i < $('.file-input')[0].files.length; i++){
    console.log($('.file-input')[0].files[i].type);
}

Приймання атрибутів має деякі проблеми з декількома атрибутами, і в цьому випадку він не працює належним чином.


1

Я змінив рішення @yogi. Крім того, коли файл має неправильний формат, я скидаю значення вхідного елемента.

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 у вхідному елементі.


0

Тепер ви можете використовувати новий атрибут перевірки вводу html5 pattern=".+\.(xlsx|xls|csv)".


10
За повідомленням MDN , що This attribute applies when the value of the type attribute is text, search, tel, url or email; otherwise it is ignored.стосується введення файлів, вони продовжують говоритиfile: A control that lets the user select a file. Use the accept attribute to define the types of files that the control can select.
Dom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.