前回の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()は要らないのです。
