Laravelでは画像アップロードを簡単に行うことができます。
作業工程は以下の通りです。:
①ルーティング
→フォームビュー
→リクエスト
②コントローラー
③ビュー
まず、ルーティングを記載します。
--->routes.php
Route::get('/', 'UploadController@index');
Route::post('/store', [
'as' => 'store', 'uses' => 'UploadController@store'
]);
後はビューを制作しましょう。
--->uploads.blade.php
{!! Form::open(['url' => 'route.store', ['files' => true]]) !!}
@if (isset($message))
<div class="alert">{{$message}}</div>
@endif
<?php echo Form::token(); ?>
<?php echo Form::label('upload', 'Upload a file'); ?>
<?php echo Form::file('file'); ?>
<?php echo Form::submit('Submit'); ?>
{!! Form::close() !!}
*['files'=>true]*を忘れずに記載する。
次はコントローラー( バリデーションチェックとビジネスロジックのため )
--->UploadController.php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Request;
class UploadController extends Controller {
public function index(Request `$`request)
{
return view('uploads');
}
public function store(Request $request)
{
// バリデーションルール
$rules = [
'file' => 'image|max:3000',
];
//バリデーションされているファイルは (jpeg, png, bmp, gif, or svg)にしないといけません。
//3000Kb以下のファイルにする必要です。
// バリデーターにルールとインプットを入れる
$validation = Validator::make($request, $rules);
// バリデーションチェックを行う
if ($validation->fails()) {
return redirect('/')->with('message', 'ファイルを確認してください!');
}
//バリデーションルール、メッセージをRequestファイルに書いて、呼ばれることもあります。
$imageName = str_shuffle(time().$request->file('file')->getClientOriginalName()). '.' . $request->file('file')->getClientOriginalExtension();//ファイル名をユニックするためstr_shuffleを使う
$request->file('file')->move(
base_path() . '/public/images/catalog/confirm', $imageName
);
return redirect('/')->with('message', 'ファイルをアップロードしました!');
}
}
大事な機能:
→アップロードするファイル名を取得するため、*getClientOriginalName()*を使う
→アップロードするファイルの一時的な名を取得するため、*getFilename()*を使う
→アップロードされたファイルのパスを取得の場合、*getRealPath()*を使う
→アップロードされたファイルのサイズを取得の場合、*getClientSize()*を使う
→アップロードされたファイルのmimeタイプを取得の場合、*getClientMimeType()*を使う
→アップロードされたファイルの拡張子を取得の場合、*getClientOriginalExtension()を使う
→move()*メソッドはファイルを記載したパスまで移動するために使います。ファイルパスはパラメーター1とファイル名はパラメーター2で記載する必要があります。