はじめに
- 下記のコマンドを実行しないとファイルのアップロードはうまくいかない。
$ php artisan storage:link
readouble.com
ルーティングの設定
- routes/web.phpファイルに下記の記述を追記する
use App\Http\Controllers\FileController;
Route::get('/file/new', [FileController::class, 'new'])->name('files.new');
Route::post('/file/upload', [FileController::class, 'upload'])->name('files.upload');
Controllersの実装
- newはフォーム画面を表示させる
- uploadは画像を取得してS3のアップロードする処理
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App;
class FileController extends Controller
{
public function new(){
return view('files.new');
}
public function upload(Request $request){
$path = $request->file('image')->store('public/files');
$file_name = basename($path);
$s3 = App::make('aws')->createClient('s3');
$s3->putObject(array(
'Bucket' => '<バケット名>',
'Key' => $file_name,
'SourceFile' => '/your_root_path/public/storage/files/'.$file_name
));
return view('files.new');
}
}
View実装
<form action="/file/upload" method="post" enctype='multipart/form-data'>
{{ csrf_field() }}
<div>
<input type="file" name="image">
</div>
<input type="submit" value="アップロードする">
</form>