HTML入力=「ファイル」属性ファイルタイプの受け入れ(CSV)


501

ページにファイルアップロードオブジェクトがあります。

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

私のデスクトップに次のExcelファイルがあります:

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

私は、ファイルのアップロードがしたいONLY示し.xlsx.xls.csvファイルを。

使用するaccept属性を、私はこれらのコンテンツ・タイプはの世話をした見つかっ.xlsx.xls拡張...

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

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

ただし、Excel CSVファイルの正しいコンテンツタイプが見つかりません。助言がありますか?

例:http : //jsfiddle.net/LzLcZ/


重要なファイルの送信に注意を払っていないユーザーを誘導するために使用できるため、ほとんどのブラウザはaccept属性を尊重しません。
tletnes 2012

9
@tletnesは真実ではありません、それはほとんどの主要なブラウザでサポートされています
Dom

if($ .trim($( '#OriginalFileName')。val())!= ""){var ext = $( '#OriginalFileName')。val()。split( '。') .pop()。toLowerCase(); if($ .inArray(ext、['doc'、 'docx'、 'pdf'、 'xlsx'、 'xls'])== -1){$( '#OriginalFileNameValid')。html( 'Use .doc 、.docx、.pdfファイル '); }}
Nithin Paul 2014

他のUbuntuユーザーが混乱している場合は、UbuntuではFirefoxがデフォルトで「すべてのファイル」を表示していることを確認しましたが、ファイル選択ダイアログのファイルタイプドロップダウンに「accept」属性を追加しています。
mltsy

回答:


1248

まあこれは恥ずかしいです...私が探していた解決策を見つけました、そしてそれはもっと簡単なことではありませんでした。次のコードを使用して、目的の結果を取得しました。これが将来の誰かを助けることを願っています。皆さんの助けに感謝します。

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

デモ:http :
//jsfiddle.net/dirtyd77/LzLcZ/144/


注意:

Excel CSVファイル(.csv)を表示する場合は、使用しないでください。

  • text/csv
  • application/csv
  • text/comma-separated-valuesOperaでのみ動作します)。

特定のファイルの種類(たとえば、a WAVまたはPDF)を表示しようとしている場合、これはほとんど常に機能します...

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

3
Chromeはこの属性をサポートしているようですが、Firefoxはまだそれに取り組んでいます。あなたはこのバグに投票して、彼らがより早く解決できるようにすることができます:bugzilla.mozilla.org/show_bug.cgi
Salvatorelab

3
@DavidRouten accept属性は、ファイルタイプをフィルタリングするだけです。ユーザーが他の種類のファイルを選択できないようにするには、ファイル検証も使用する必要があります。お役に立てば幸いです。
Dom

1
<input type = "file" accept = "。csv" />は、Firefoxでは機能しません。Firefoxでこれを機能させる他の解決策はありますか?
Ganesa Vijayakumar 2014

1
<input type="file" accept=".csv, text/csv" />MacのFirefox、Chrome、オペラで私のために働いた。一部のブラウザでは.csvのみが機能しませんでした。
tmas

1
「xml」ファイルの例を追加できますか?参考になります。前もって感謝します。
ni8mr


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
クールな回避策ですが、そのような属性が「古い」と見なされる理由がわかりません。これはほぼすべてのOSの基本的なファイルセレクター機能であり、ブラウザーはそれを機能させるために最善を尽くす必要があり、多くのユーザーに役立ちます...
Christophe Roussy 14

1
accept属性は古いものではなく、IE / Edgeを除く主要なブラウザーでサポートされています:caniuse.com/#feat=input-file-accept。それは誤解を招くので、答えを言い換えてください。
thomaux

2
accept属性の最も重要な側面は、ファイルを開くダイアログに提供されるヒントです。ユーザーには、デフォルトで一致するファイルが表示されます。おそらく、必要に応じて他のタイプを選択するオプションが表示されます。これが現在のほとんどのブラウザの動作です。
Coderer 2017年

13

text/comma-separated-valuesAccept属性でCSVのMIMEタイプを使用しましたが、Operaでは問題なく動作します。試しましたtext/csv運なし。

提案されたものが機能しない場合のCSVのその他のMIMEタイプ:

  • text / comma-separated-values
  • テキスト/ csv
  • application / csv
  • アプリケーション/エクセル
  • application / vnd.ms-excel
  • application / vnd.msexcel
  • テキスト/任意のテキスト

出典:http : //filext.com/file-extension/CSV


1
やあ、ドム!Operaのみでサイトをテストしていたため、あなたの答え(正しいとマークされている)はOKで、以前はあまり注意を払っていなかったため、申し訳ありません。他のブラウザでテストしたところ、あなたの回答はより完全であることがわかりました。ただし、すべてのブラウザで機能するわけではありません。Firefox 17は、ファイルダイアログ(bugzilla.mozilla.org/show_bug.cgi?id=83749#c14)でのフィルターの受け入れ方法をサポートしていないため、このプロパティは私にとって疑わしいものです。私はとにかくjavascriptファイル検証を使用しますが、それはIANA iana.org/assignments/media-types
jaysponsored

11

これはSafari 10では機能しませんでした。

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

代わりにこれを書かなければなりませんでした:

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

Hii 、、、、それは私のサファリでもうまくいきます。しかし、Excelドキュメントを受け入れる場合はどうすればよいでしょうか。手がかりはありますか?@trojan
gustav

ビッグマネーの答えを確認してください。TLDR; <input type = "file" ID = "fileSelect" accept = "。xlsx、.xls、.csv" />
Sk。Irfan

4

次の操作を行うだけで、ファイルの正しいコンテンツタイプを確認できます。

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

属性の受け入れには、複数の属性に関するいくつかの問題があり、この場合は正しく機能しません。


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.