2016-07-23 11 views
0

Ich habe ein Laravel-Projekt gemacht, wo Benutzer Bilder hochladen können. Ich habe das Projekt auf dem lokalen Server getestet und nichts falsch gefunden. Nach dem Hochladen des Projekts auf den Produktionsserver habe ich festgestellt, dass wenn ein Benutzer versucht, Bilder mit einer Größe von mehr als 1,5 MB hochzuladen, der Fehler TokenMismatchException in VerifyCsrfToken.php line 67 angezeigt wird, obwohl ich in meinem Formular csrf Token habe. Nach einigem Suchen fand ich heraus, dass einige Leute vorschlagen, die beiden Dinge in der php.ini Datei zu ändern und den nginx Server neu zu starten. So habe ich die post_max_size = 40Mupload_max_filesize = 40M geändert und auch die max_execution_time = 0 geändert, die unbegrenzte Ausführungszeit bedeutet. Dann starte ich diesen Befehl sudo service nginx restart und php artisan up und versuchte, ein Bild mit 21 MB Größe hochzuladen. Als ich den Submit-Knopf drückte, dauerte es einige Zeit, um das Bild hochzuladen und warf schließlich die Token-Mismatch-Ausnahme auf. Ich benutze Ubuntu 16.04 für lokale Tests. Irgendeine Lösung für dieses Problem bitte? Ich teile die Codes: Ansicht:PHP-Einstellungen auf lokalen vs Produktionsserver (Laravel)

{!! Form::open(['url'=> "pro/{$user->id}/upload",'files'=> 'true', 'class'=> 'form-horizontal']) !!} 

    <input id="filebutton" name="image" class="input-file" type="file"> 
    <input name="title" class="form-control" type="text" required=""> 
    <button type="submit" class="btn btn-danger btn-block btn-flat">Upload</button> 
    {!! Form::close() !!} 

Controller:

public function save($id, PortfolioRequest $request) 
    { 
    $pro = User::findOrFail($id); 
    $file = $request->file('image'); 
    $original_path = public_path('uploads/portfolio/original/'); 

    $file_name = str_random(64).'_'.$request->title.'_user_'. $pro->id . '.' . $file->getClientOriginalExtension(); 

    Image::make($file) 
      ->resize(750,null,function ($constraint) { 
       $constraint->aspectRatio(); 
       }) 
      ->save($original_path . $file_name); 


    $portfolio = Portfolio::create([ 
     'user_id' => $id, 
     'image' => $file_name, 
     'title' => $request->title 
    ]); 

    return redirect("pro/{$id}/portfolio"); 
    } 

die erzeugte Form:

<form method="POST" action="www.xxxx.com/pro/3/upload" accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data"><input name="_token" type="hidden" value="EsH8KaSSoXovzjZ0RnWWi7eEwNWNgYlBVRm7yUYr"> 
+0

Die generierte Form html Wie sieht das Token dort aus? –

+0

@MartinHenriksen Ich habe hinzugefügt, dass –

+0

Haben Sie vor erfahrenen Sitzungen versauen und erstellen eine neue Sitzung auf der Post-Anfrage und damit die Token nicht übereinstimmen. –

Antwort

0

Versuchen, diese zu Ihrem <header>:

<meta name="csrf-token" content="{{ csrf_token() }}" /> 
Verwandte Themen