2012-10-20 10 views
24
var fd = new FormData(); 
fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]); 
var xhr = new XMLHttpRequest(); 
xhr.open("POST", "uph.php"); 
xhr.send(fd); 

uph.phpを使用して複数のファイルをアップロードします。選択したファイルに対してこれを動作させるにはどうすればよいですか?はFORMDATA()

[0]を削除しようとしましたが、機能しませんでした。

答えて

11

あなただけfileToUploadの代わりにfileToUpload[]を使用する必要があります:あなたが追加したファイルの長さを取得する必要があります

fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[0]); 

をそして、それは複数の名前、サイズ、などを持つ配列を返します...

42

JSで、その後

//JavaScript 
var ins = document.getElementById('fileToUpload').files.length; 
for (var x = 0; x < ins; x++) { 
    fd.append("fileToUpload[]", document.getElementById('fileToUpload').files[x]); 
} 

//PHP 
$count = count($_FILES['fileToUpload']['name']); 
for ($i = 0; $i < $count; $i++) { 
    echo 'Name: '.$_FILES['fileToUpload']['name'][$i].'<br/>'; 
} 
+2

はなぜ[] filetoupload? – Phoenix

+0

私のために働かなかった。私はあなたのマルチパートフォームがサーバー側でどのように処理されるかによって異なります。 – fubbe

+7

[MDNによると、通常のフォームデータと同じ名前の複数の値を追加できます。例えば(名前に[]をつけてPHPの命名規則と互換性がある): '。例3を参照してください。(https://developer.mozilla.org/en-US/docs/Web/API/FormData/append)@Phoenix – 0xcaff

21

以下のようにAJAX要求を介して、JavaScriptを使用して移動するための方法を、それを送信します。

var data = new FormData(); 

$.each($("input[type='file']")[0].files, function(i, file) { 
    data.append('file', file); 
}); 

$.ajax({ 
    type: 'POST', 
    url: '/your/url', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data : data, 
    success: function(result){ 
     console.log(result); 
    }, 
    error: function(err){ 
     console.log(err); 
    } 
}) 

data.append( 'file'、file)を複数回呼び出すと、リクエストにはファイルの配列が含まれます。

自分がNode.jsのとマルチパートハンドラミドルウェアmulterを使用して、次のようなデータを取得:

router.post('/trip/save', upload.array('file', 10), function(req, res){ 
    // Your array of files is in req.files 
} 
+1

'... data.append( 'file'、file)を呼び出すとmultipleあなたの要求にあなたのファイルの配列が含まれている時間... ''私は名前が '' file [] 'であるべきだと思ったので、私は絶望した時間を節約しました。 – bourgeois247

+1

あなたは伝説です。朝のおかげで、これを探しています。 – Kannan

+1

私はあなたに試してみましたが、私はそれをvar_dumpedすると、常にセットの最後のイメージを返します。私は 'data.append( 'file'、file)'を 'data.append( 'file'、i)'に変更しました。 –

関連する問題