Input HTML = "file" Accetta il tipo di file di attributo (CSV)


501

Ho un oggetto di caricamento file sulla mia pagina:

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

con i seguenti file Excel sul mio desktop:

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

Voglio che il caricamento di file per SOLO mostrare .xlsx, .xls, e .csvfile.

Usando l' acceptattributo, ho scoperto che questi tipi di contenuto si sono occupati di .xlsx& .xlsestensioni ...

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

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

Tuttavia, non riesco a trovare il tipo di contenuto corretto per un file CSV di Excel! Eventuali suggerimenti?

ESEMPIO: http://jsfiddle.net/LzLcZ/


la maggior parte dei browser non rispetta l'attributo accetta poiché può essere utilizzato per incoraggiare gli utenti che non prestano attenzione a trasmettere file sensibili.
Tletnes,

9
@tletnes non è vero, è supportato dalla maggior parte dei browser principali
Dom

Puoi anche provare questo se ($ .trim ($ ('# OriginalFileName'). Val ())! = "") {Var ext = $ ('# OriginalFileName'). Val (). Split ('.') .pop () toLowerCase ().; if ($ .inArray (ext, ['doc', 'docx', 'pdf', 'xlsx', 'xls']) == -1) {$ ('# OriginalFileNameValid'). html ('Usa .doc , .docx, .pdf files '); }}
Nithin Paul,

Nel caso in cui altri utenti Ubuntu si confondano con questo, ho scoperto che in Ubuntu, per impostazione predefinita Firefox mostra "Tutti i file", ma aggiunge qualunque sia l'attributo "accetta" al menu a discesa del tipo di file nella finestra di dialogo di selezione dei file.
mltsy,

Risposte:


1248

Bene, questo è imbarazzante ... Ho trovato la soluzione che stavo cercando e non potrebbe essere più semplice. Ho usato il seguente codice per ottenere il risultato desiderato. Spero che questo aiuti qualcuno in futuro. Grazie a tutti per il vostro aiuto.

<input id="fileSelect" type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />  

Tipi di accettazione validi:

Per i file CSV (.csv), utilizzare:

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

Per i file Excel 97-2003 (.xls), utilizzare:

<input type="file" accept="application/vnd.ms-excel" />

Per Excel File 2007+ (.xlsx), utilizzare:

<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />

Per i file di testo (.txt) utilizzare:

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

Per i file di immagine (.png / .jpg / ecc.), Utilizzare:

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

Per i file HTML (.htm, .html), utilizzare:

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

Per i file video (.avi, .mpg, .mpeg, .mp4), utilizzare:

<input type="file" accept="video/*" />

Per i file audio (.mp3, .wav, ecc.), Utilizzare:

<input type="file" accept="audio/*" />

Per i file PDF , utilizzare:

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

DEMO:
http://jsfiddle.net/dirtyd77/LzLcZ/144/


NOTA:

Se si sta tentando di visualizzare i file CSV di Excel ( .csv), NON utilizzare:

  • text/csv
  • application/csv
  • text/comma-separated-values( funziona solo in Opera ).

Se stai provando a visualizzare un particolare tipo di file (ad esempio, a WAVo PDF), questo funzionerà quasi sempre ...

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

3
Sembra che Chrome supporti questo attributo, ma Firefox ci sta ancora lavorando. Puoi votare questo bug in modo che lo risolvano più velocemente: bugzilla.mozilla.org/show_bug.cgi?id=826176
Salvatorelab il

3
@DavidRouten l'attributo accetta filtrerebbe solo i tipi di file. Dovresti utilizzare anche la convalida dei file per impedire agli utenti di selezionare altri tipi di file. Spero che aiuti!
Dom

1
<input type = "file" accept = ". csv" /> non funziona in Firefox. Esiste un'altra soluzione per farlo funzionare in Firefox.
Ganesa Vijayakumar,

1
<input type="file" accept=".csv, text/csv" />ha funzionato per me in Firefox, Chrome e Opera su Mac. solo .csv non ha funzionato in tutti i browser.
tmas

1
Puoi aggiungere un esempio per il file "xml"? Sarà utile. Grazie in anticipo.
ni8mr


38

Dom questo attributo è molto vecchio e non è accettato nei browser moderni per quanto ne so, ma ecco un'alternativa ad esso, Prova questo

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

Immagino che ti aiuterà ovviamente a cambiare questo script in base alle tue esigenze.


5
Fantastica soluzione ma non capisco perché tale attributo sia considerato "vecchio". Questa è una funzione di selezione dei file di base su quasi tutti i sistemi operativi, i browser dovrebbero fare del loro meglio per farlo funzionare e aiuterebbe molti utenti ...
Christophe Roussy,

1
L'attributo accetta non è vecchio ed è supportato nei principali browser ad eccezione di IE / Edge: caniuse.com/#feat=input-file-accept . Ti preghiamo di riformulare la tua risposta poiché è fuorviante.
thomaux,

2
L'aspetto più importante acceptdell'attributo è il suggerimento che fornisce alla finestra di dialogo a file aperto. All'utente dovrebbero essere presentati i file corrispondenti per impostazione predefinita, presumibilmente con un'opzione per selezionare altri tipi se lo desiderano - ecco come si comportano i browser più moderni ora.
Coderer,

13

Ho usato text/comma-separated-valuesper CSV mime-type nell'attributo accetta e funziona bene in Opera. Ho provato text/csvsenza fortuna.

Alcuni altri tipi MIME per CSV se il suggerito non funziona:

  • testo / valori separati da virgole
  • text / csv
  • application / csv
  • application / excel
  • application / vnd.ms-excel
  • application / vnd.msexcel
  • text / anytext

Fonte: http://filext.com/file-extension/CSV


1
Ciao dom! Voglio scusarmi perché la tua risposta (contrassegnata come corretta) è OK e non ho molta attenzione prima perché stavo testando il sito solo in Opera. Dopo aver testato su altri browser, vedo che la tua risposta è più completa. Ma non funziona in tutti i browser. Firefox 17 non supporta accetta attr come un filtro nella finestra di dialogo File ( bugzilla.mozilla.org/show_bug.cgi?id=83749#c14 ), quindi questa proprietà è sospensiva per me. Userò
jaysponsored

11

Questo non ha funzionato per me in Safari 10:

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

Ho dovuto scrivere questo invece:

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

Ciao, funziona anche nel mio safari. Ma se vogliamo accettare documenti Excel? hai qualche idea? @trojan
Gustav

Controlla la risposta di Big Money. TLDR; <input type = "file" ID = "fileSelect" accept = ". xlsx, .xls, .csv" />
Sk. Irfan,

4

Puoi conoscere il tipo di contenuto corretto per qualsiasi file semplicemente procedendo come segue:

1) Seleziona il file interessato,

2) Ed esegui in console questo:

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

Puoi anche impostare l'attributo "multiplo" per l'input per controllare il tipo di contenuto per più file contemporaneamente e procedere come segue:

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

L'accettazione degli attributi presenta alcuni problemi con più attributi e in questo caso non funziona correttamente.


1

Ho modificato la soluzione di @yogi. Inoltre, quando il file ha un formato errato, reimposto il valore dell'elemento di input.

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;
}

Ho un buildin di verifica personalizzato, perché nella finestra del file aperta l'utente può ancora scegliere le opzioni "Tutti i file ('*')", indipendentemente dal fatto che imposti esplicitamente l'attributo accetta nell'elemento di input.


0

Ora puoi utilizzare il nuovo attributo di convalida dell'input html5 pattern=".+\.(xlsx|xls|csv)".


10
Secondo MDN , per This attribute applies when the value of the type attribute is text, search, tel, url or email; otherwise it is ignored.quanto riguarda l'input del file, continuano dicendofile: 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.