<input type =“ file”>で複数のファイルを選択する方法は?


110

で複数のファイルを選択するにはどうすればよい<input type="file">ですか?


これは、javascriptとhtmlに関するものです
マスク

複数のファイルを一度にアップロードすることを意味しますか(一度に1つを選択して[アップロード]をクリックした場合)?または、Ctrlキーを押しながらクリックして、1つのブラウザーウィンドウで複数のファイルを選択するということですか?
cletus 2009年

2
input要素のmultiple属性を使用して、HTML5でそれを行うことができます。<input type = 'file' multiple = ''>これを利用する素晴らしいフィドルは次のとおり
コスタ

回答:


126

新しい答え:

HTML5では、multiple属性を追加して複数のファイルを選択できます。

<input type="file" name="filefield" multiple="multiple">

古い答え:

につき1つのファイルしか選択できません<input type="file" />。複数のファイルを送信する場合は、複数の入力タグを使用するか、FlashまたはSilverlightを使用する必要があります。


7
Gmailはこれを行うためにFlashを使用しています
FabienMénager09年

19
HTML5以降ではありません。入力フィールドには複数の属性があります。
コスタ

2
@Costa 2009年10月20日、ほとんどのブラウザーはその機能をサポートしていませんでした。Niavlysはすでに2年前にhtml5ソリューションを示しました。
ZippyV 2013

2
この回答は恐竜よりも古くなっています
クリックUpvote

2
このmultiple = "multiple"はユーザーフレンドリーではなく、Avarageユーザーはそれを理解していません。「ctrlボタン」が何をするかも知らず、異なるフォルダー内のファイルを選択できません。
Jean-Paul

84

HTML5 <input type="file" multiple />仕様)もあります。

ブラウザのサポートはデスクトップでは非常に優れており(IE 9以前ではサポートされていません)、モバイルではあまり良くありません。プラットフォームやバージョンによっては、正しく実装することが難しいためです。


9
IE9以前ではサポートされていません:(
Ashit Vora

7
追加を検討してくださいname="files[]"
Wariored

22

全体は次のようになります。

<form enctype='multipart/form-data' method='POST' action='submitFormTo.php'> 
    <input type='file' name='files[]' multiple />
    <button type='submit'>Submit</button>
</form>

タグにenctype='multipart/form-data'属性があることを確認してください。そうでない場合は<form>、送信後にサーバー側でファイルを読み取ることができません。


websocketまたはajaxで送信しない限り
bluejayke


8

あなたは今HTML5でそれを行うことができます

基本的に、ファイル入力で複数の属性を使用します。

<input type='file' multiple>

このことのサポートはどうですか?Canisuse.comには情報がありません。
Hubert OG

わからないけど、同じ場所をチェックした。
コスタ

1
FileReaderに.nameプロパティがないため、例のタイトルは常にundefinedjsfiddle.net/m5jeyeyt/1
vladkras

1

HTML5は、type属性がfileであるinput要素に新しい属性multipleを提供しています。したがって、複数のファイルを選択でき、IE9以前のバージョンではこれをサポートしていません。

注:input要素の名前には注意してください。複数のファイルをアップロードする場合は、name属性の値として文字列ではなく配列を使用する必要があります。

例:input type = "file" name = "myPhotos []" multiple = "multiple"

phpを使用している場合は、$ _ FILESのデータを取得し、var_dump($ _ FILES)を使用して出力を確認し、処理を実行します。これで、繰り返し処理して残りを実行できます


1

簡単だ ...

<input type='file' multiple>
$('#file').on('change',function(){
     _readFileDataUrl(this,function(err,files){
           if(err){return}
           console.log(files)//contains base64 encoded string array holding the 
           image data 
     });
});
var _readFileDataUrl=function(input,callback){
    var len=input.files.length,_files=[],res=[];
    var readFile=function(filePos){
        if(!filePos){
            callback(false,res);
        }else{
            var reader=new FileReader();
            reader.onload=function(e){              
                res.push(e.target.result);
                readFile(_files.shift());
            };
            reader.readAsDataURL(filePos);
        }
    };
    for(var x=0;x<len;x++){
        _files.push(input.files[x]);
    }
    readFile(_files.shift());
};

5
これはすでに明確に答えられています。JavaScriptの例を追加する必要は何ですか?
RightHandedMonkey 2017年

その素敵な原因?
Thomas Ludewig

0
<form action="" method="post" enctype="multipart/form-data">
<input type="file" multiple name="img[]"/>
<input type="submit">
</form>
<?php
print_r($_FILES['img']['name']);
?>

-2

これをコピーしてhtmlに貼り付けます。

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object

// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
  output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
              f.size, ' bytes, last modified: ',
              f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
              '</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}

これは私を通して、次のWebページからあなたに届きます:http : //www.html5rocks.com/en/tutorials/file/dndfiles/

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