下載 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
- 取得上傳檔案:https://laravel.com/docs/5.4/requests#files
- 驗證欄位:https://laravel.com/docs/5.4/validation#manually-creating-validators
- 驗證錯誤訊息:https://laravel.com/docs/5.4/validation#custom-error-messages
- 快閃資料:https://laravel.com/docs/5.4/session#flash-data
- 上傳至 S3:https://laravel.com/docs/5.4/filesystem
AWS
錯誤處理
<form method="POST">
{{ csrf_field() }}
...
</form>
參考來源