2017-10-18 10 views
0

別のフォーム入力で複数の画像をアップロードするにはdropzoneを使用したい ので、ユーザーがクリックすると画像を表示するdivが必要です。 もフォームをトリガーするボタンがあります。Laravelとdropzone divと別のフォーム入力を使用

私はこれを持っていますが、動作していないその

HTML:

<div class="col-md-12"> 
     <h1>Upload Multiple Images using dropzone.js and Laravel</h1> 
     {!! Form::open([ 'route' => [ 'dropzone.store' ], 'files' => true, 'enctype' => 'multipart/form-data', 'class' => '', 'id' => '' ]) !!} 

     {!! Form::text('name'); !!} 
     <div class="dropzone" id="image-upload"> 
      <h3>Upload Multiple Image By Click On Box</h3> 

      <button type="submit" class="btn btn-success" id="submit-all"> 
      Enviar files 
      </button> 
     </div> 
     {!! Form::close() !!} 
    </div> 

ドロップゾーン:これは私にこのエラーを与えた

Dropzone.autoDiscover = false; 

    var imageUpload = new Dropzone("div#image-upload", { 
     url: "dropzone/store", 
     autoProcessQueue:false, 
     uploadMultiple: true, 
     maxFilesize:5, 
     maxFiles:3, 
     acceptedFiles: ".jpeg,.jpg,.png,.gif", 

     init: function() { 
      var submitButton = document.querySelector("#submit-all") 
       //imageUpload = this; // closure 

      submitButton.addEventListener("click", function(e) { 
       e.preventDefault(); 
       e.stopPropagation(); 
       imageUpload.processQueue(); // Tell Dropzone to process all queued files. 
      }); 

      // You might want to show the submit button only when 
      // files are dropped here: 
      this.on("addedfile", function() { 
       // Show submit button here and/or inform user to click it. 
      }); 

     } 

    } 

http://127.0.0.1/project/public/dropzone/store 419(不明状態)

myController:

public function dropzone() 
{ 
    return view('dropzone-view'); 
} 

/** 
* Image Upload Code 
* 
* @return void 
*/ 
public function dropzoneStore(Request $request) 
{ 


    $dir = public_path().'/upload/'; 
    $files = $request->file('file'); 

    foreach($files as $file){ 
     $fileName = $file->getClientOriginalName(); 
     $file->move($dir, $fileName); 
    } 
} 

経路:web.php

Route::get('dropzone', '[email protected]'); 
Route::post('dropzone/store', ['as'=>'dropzone.store','uses'=>'[email protected]']); 
+1

はい、エラーは、私はこのようにdropzoneオブジェクトの中に入れます:var myDropzone = new Dropzone( "div#ima (「コンテンツ」) })};}};}};} { – Leoh

答えて

1

Laravelトークン不一致問題がある場合419応答を返します。表示されたコードはサーバーにファイルを送信しますが、要求に応じて_tokenを渡しません。デフォルトで適用されるWebミドルウェアはトークン検証を行い、トークンが存在しないため失敗し、419をスローします。

ブラウザのdevtoolsを見ると、おそらくこれを見ることができます。 [ネットワーク]タブで、ファイルがアップロードされているPOST要求をクリックし、[プレビュー]タブまたは[応答]タブをクリックします。

したがって、リクエストとともに_tokenを渡す必要があります。そこにそれを行うには多くの方法がありますが、最も簡単なのは、おそらくwhat is described in the docsです:

  1. は、自動的にすべてのAJAX要求でそれを渡すあなたの<head>

    <meta name="csrf-token" content="{{ csrf_token() }}"> 
    
  2. にトークンを追加します。

    $.ajaxSetup({ 
        headers: { 
         'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
        } 
    }); 
    
+0

あなたのヘルプに感謝します。ドンパニック:) – Leoh

関連する問題