下載 Amazon S3 套件

  • 設定 composer.json
"require": {
    // ...

    "league/flysystem-aws-s3-v3": "~1.0"
},
  • 安裝
# 移至 laravel 資料夾內
$ composer update

S3 config

.env

AWS_KEY=
AWS_SECRET=
AWS_REGION=
AWS_BUCKET=

config\filesystems.php

disks' => [
    // ...

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_KEY'),
        'secret' => env('AWS_SECRET'),
        'region' => env('AWS_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],

],

Code

  • build controller
$ php artisan make:controller UploadController
  • routing

routes\web.php

Route::get('upload', 'UploadController@upload');
Route::post('doupload', 'UploadController@doupload');
  • view

resources\views\upload.blade.php

<form action="doupload" method="post" enctype="multipart/form-data">
    {{ csrf_field() }}
    <input type="file" name="photo" id="photo" />
    <input type="submit" value="Upload" name="submit" />
</form>

@if(Session::has('error'))
<p style="color:red;">{!! Session::get('error') !!}</p>
@endif

@if(Session::has('success'))
<p style="color:green;">{!! Session::get('success') !!}</p>
@endif
  • controller

app\Http\Controllers\UploadController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Validator;
use Redirect;
use Storage;

class UploadController extends Controller
{
    public function upload()
    {
        return view('upload');
    }

    public function doupload(Request $request)
    {
        $file = $request->file('photo');
        if ($request->hasFile('photo')) {

            $item = ['photo' => $file];
            $rules = ['photo' => 'required|image'];
            $messages = [
                'photo.required' => '無檔案',
                'photo.image' => '只能上傳圖片'
            ];
            $validator = Validator::make($item, $rules, $messages);

            if ($validator->fails()) {
                $request->session()->flash('error', $validator->messages()->first('photo'));
            } else {
                $path = $request->photo->path();
                $extension = $request->photo->extension();

                $imageName = '0000.' . $extension;
                Storage::disk('s3')->put($imageName, file_get_contents($path), 'public');
                $request->session()->flash('success', '上傳成功');
            }

        } else {
            $request->session()->flash('error', '無檔案');
        }

        return redirect('upload');
    }
}

Docs

Laravel

AWS


錯誤處理

<form method="POST">
    {{ csrf_field() }}
    ...
</form>

參考來源

https://laravel.com/docs/5.4/csrf#csrf-introduction

results matching ""

    No results matching ""