フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

aws-sdk-php-laravelでS3にファイルをアップロードする

はじめに

  • 前回、aws-sdk-php-laravelをインストールしたので、こちらを利用してファイルのアップロードを行う px-wing.hatenablog.com

シンボリックリンクを設定する

  • 下記のコマンドを実行しないとファイルのアップロードはうまくいかない。
$ 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実装

  • imageをアップロードするだけのフォームです。
<form action="/file/upload" method="post" enctype='multipart/form-data'>
    {{ csrf_field() }}
    <div>
        <input type="file" name="image">
    </div>
    <input type="submit" value="アップロードする">
</form>