前回のDropzone.jsを使用したファイルアップロードのフロントエンドに対して、サーバーサイドのバックエンドをLaravelでプログラムします。つまり、アップロードされたファイルを受け取るプログラムです。
まず、routes.phpにルートの追加となりますが、前回の設定を見てみますと、
<div class="form-group{{ $errors->has('file') ? ' has-error' : '' }}"> <div> <form method="POST" action="/demo/public/user/upload" class="dropzone" id="imageUpload" enctype="multipart/form-data"> {{ csrf_field() }} </form> </div> </div>
<form>
のパラメータのaction
で指定している/demo/public/user/upload
がルートとなります。
となると、routes.phpでは、
... Route::get('upload', 'User\UserController@getUpload'); Route::post('upload', 'User\UserController@postUpload'); ...
のようになります。get
の方は前回の画面を表示するとして、post
は、サーバーでアップされるファイルの処理となります。
namespace App\Http\Controllers\User; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use Validator; class UserController extends Controller { ... public function getUpload() { return view('user/upload'); } public function postUpload(Request $request) { ... $request->file('file')->move(public_path('images'), 'test.jpg'); } }
ファイルをアップロードすると、php
は、/tmp
のディレクトリに一時的なファイルを作成します。上の29行目では、それをpublic/images
のディレクトリにtest.jpg
と命名してファイルを保存します。
最後に、上のpostUpload()
の関数の最後において、通常あるredirect()
文がないことに気づきましたか?
この関数は、Dropzone.jsによりajaxでコールされるので、画面を更新するためのredirect()
は要らないのです。