はじめに
Laravel5から、ファイルシステムとしてクラウドストレージ(S3 or Rackspace)を簡単に利用できるようになりました。
保存先に依らず同じメソッドでファイルの操作を出来るので、非常に便利ですね。
使用方法
まずは、S3を使用するためのパッケージを登録します。
composer.json
"require": {
"laravel/framework": "5.0.*",
"league/flysystem-aws-s3-v2": "~1.0"
},
$ composer update
次に、S3の設定を記述します。.envに記述して切り替えられるようにしておくと良いでしょう。
config/filesystems.php
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path().'/app',
],
's3' => [
'driver' => 's3',
'key' => env('S3_ACCESS_KEY'),
'secret' => env('S3_SECRET_KEY'),
'region' => env('S3_REGION'),
'bucket' => env('S3_BUCKET'),
],
・・・
],
.env
S3_ACCESS_KEY=your-key
S3_SECRET_KEY=your-secret
S3_REGION=your-region
S3_BUCKET=your-bucket
設定はこれだけです!後はgetなりputなり簡単に出来ます。
$disk = Storage::disk('s3');
// ファイルのアップロード
$disk->put('hoge.jpg', $contents);
// ファイルの取得
$contents = $disk->get('hoge.jpg');
// ファイルのコピー
$disk->copy('hoge.jpg', 'fuga.jpg');
// ファイルの削除
$disk->delete(['hoge.jpg', 'fuga.jpg']);
他にも移動やサイズ取得等いろいろ出来ます。詳しくは公式ドキュメントを参照してください。
http://laravel.com/docs/5.0/filesystem
また、league/flysystemではS3とRackspace以外のアダプタも用意されており、ServiceProviderの設定のみで簡単に利用ストレージを拡張できるようです。
https://github.com/GrahamCampbell/Laravel-Flysystem
拡張方法も公式ドキュメントに書かれていますね。
http://laravel.com/docs/5.0/filesystem#custom-filesystems