2016-05-17 17 views
2

私は(おそらく)複数のユーザ入力ファイルをajax経由でサーバサイドPHPに送信しています。 FormData()オブジェクトを使用して送信します。$_FILESをPHPに呼び出すと、FormData内のファイルオブジェクトキーは「未確認のインデックス」と表示されます。私は説明を虐殺知っているので、ここでの文脈だ:サーバ側のPHPでAJAX経由でファイルを受け取る

HTML:

<form id="subForm" action="" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" multiple/> 
    <button type="submit">Post</button> 
</form> 

はJQuery:

var files = $('input[type=file]').prop('files')[0]; //File list 
var formData = new FormData(); 

//Cycle through files (if many) 
for (var i = 0; i < files.length; i++) { 
    var file = files[i]; //File 

    //Type and size check 
    if (!file.type.match('image/*') && !file.type.match('video/*') && file.size > 8388608){ 
     continue; 
    } 

    // Add the file to the request. 
    formData.append('files', file, file.name); 
} 
$.ajax({ 
    type: 'POST', 
    url: 'submission.php', //Serverside handling script 
    enctype: 'multipart/form-data', 
    dataType: 'text', //Get back from PHP 
    processData: false, //Don't process the files 
    contentType: false, 
    cache: false, 
    data: formData, 
    success: function(php_script_response){ 
     console.log(php_script_response); 
    } 
}); 

PHP:PHPリターンで

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
    if(is_uploaded_file($_FILES['files']['tmp_name'][$key]) && $_FILES['files']['tmp_name'][$key]['error']==0) { 
     $path = 'uploads/' . $_FILES['files']['name'][$key]; 
     $upload = true; 

     if(file_exists($path)){ 
      //Re-Upload 
      $upload = false; 
     } 

     if(move_uploaded_file($_FILES['files']['name'][$key], $path)){ 
      //Success 
     }else{ 
      //Failure 
     } 
    }else{ 
     //File not uploaded/ saved? 
    } 
} 

1行目:

未定義のインデックス:Cでファイル:\ xamppの\ htdocsに\

submission.php私の推測は何かが私のローカルのApacheサーバー、またはjQueryを使って間違っているのどちらかであるということでしょうか?あなたは.prop('files')[0]で入力から単一の値のみをつかんでいるので、事前に

おかげ

+0

ファイルの代わりにファイルを使用する必要があります。 $ _FILES ['files']を$ _FILES ['file']に変更します。 –

+0

私は同じエラーを受け取りますが、 "ファイル"は未定義の "ファイル"の代わりに表示されます。私はJQueryとPHPの両方で "ファイル"を "ファイル"に変更しました。 – Lolechi

+1

配列$ _FILES var_dump($ _ FILES) –

答えて

1

appendは到達しません。したがって、ループではfiles.lengthは未定義です。

var files = $('input[type=file]').prop('files'); //File list 
+0

ああ、それが問題だった。あなたは '$(...)。files'と' $(...).pro( 'files') 'でファイルを取得するのと、' [0] 'を使う理由を説明できますか? – Lolechi

+1

[この回答](http://stackoverflow.com/a/13747921)良い説明があります。基本的に '.files'はjQueryオブジェクトでは機能しませんので、' .prop( 'files') 'を使うか、オブジェクトの最初のDOM要素を選択する必要があります。 '[0]'はFileListまたはjQueryオブジェクトの最初の項目を返します。 –

関連する問題