2017-05-09 9 views
1

複数の画像をajax経由でコントローラに送信し、それらを格納する方法を苦労しています。私は新しいものを作るべきだと読んだFormDataオブジェクト、と私はそれをしました。PHPサーバー側で複数のファイルを使用してjavascriptフォームデータを処理する方法は?

のは、私のコードを見てみましょう:

HTML:

<form enctype="multipart/form-data" id="formularz"> 
      <label class="btn btn-sm btn-success" for="files"> 
      <input id="files" type="file" name="zdjęcie[]" multiple style="display:none;" onchange="$('#upload-file-info').html($(this).val());"> 
      <i class="fa fa-plus-circle" aria-hidden="true"></i> Dodaj zdjęcia 
      <input type="hidden" name="_token" value="{{Session::token()}}"> 
      </label> 
      <label class="btn btn-sm btn-danger deleteImages"> 
      <i class="fa fa-times-circle" aria-hidden="true"></i> Wyczyść 
      </label> 
      <br> 
      <div class="chosenImages"> 
      <output id="list"></output> 
      </div> 
</form> 

JS:サーバー側で

var formData = new FormData($('#formularz')[0]); 

     $.ajax({ 
     method:"POST", 
     url:postAddNews, 
     data: { 
      formData:formData, 
      _token:token 
     }, 
     cache:false, 
     contentType: false, 
     processData: false, 
     success:function(data){ 
      console.log("success"); 
      console.log(data); 
     }, 
     error: function(data){ 
      console.log("error"); 
      console.log(data); 
     } 
    }); 

私は(AJAX経由で送信せずに)そのようにそれを行うだろう。

$files = $request->file('zdjęcie'); 

$i = 1; 
$filename = array(); 

foreach($files as $file) { 
     Storage::disk('local')->put('newsimages/'.$i.'.'.$file->extension(), file_get_contents($file)); 
     $i++; 
} 

私が検査するときあなたはFORMDATAに一つだけのファイルを追加しているが、multiple属性は上記のコードで

var formData = new FormData($('#formularz')[0]); 

:あなたは変更する必要があり、すべての

Inspecting element

答えて

1

まず:私はこれだけを見ることができFORMDATAオブジェクトそこにも。だからあなたのようなFORMDATA内のすべてのファイルを追加する必要があります。

var frmData = new FormData(); 
$.each($('#formularz_images')[0].files, function(i, file) { 
    frmData.append('formularz[]', file); 
}); 

とあなたのようなコントローラーでそれらを取得することができます。

ここで$
$data = Input::all(); 

データは、すべての画像が含まれていることでformularzインデックスを含み、その中に。以下のように個々の画像を取得するにはforeach()を使用します。私はあなたのソリューションを試してみた

foreach($data['formularz'] as $image) 
{ 

} 
+0

、それは素敵なようだが、私は$ '(「#のformularz」)[0] .files'にアクセスしようとすると、問題が発生します。 –

+0

私は問題を解決する方法を見つけました。あなたのソリューションをありがとう。 –

+0

これがあなたに役立つことを願っています –

関連する問題