, , , . , .
, , , URL- s3. , .
flysystem
- flysystem , getMimetype, laravel.
Laravel
AWS Sdk PHP
, s3
1. s3 config/filesystems.php. s3 , , .
return [
'default' => 's3',
'cloud' => 's3',
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path().'/app',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
],
'rackspace' => [
'driver' => 'rackspace',
'username' => 'your-username',
'key' => 'your-key',
'container' => 'your-container',
'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
'region' => 'IAD',
],
],
];
2. : ResourceController@store
, - s3, . , "public" ( ), , . .
public function store(ResourceRequest $request)
{
$resource = new Resource();
$resource->title = $request->title;
$resource->save();
$key = 'resource-'.$resource->id;
$file = file_get_contents($request->file('resource'));
$visibility = 'public';
Storage::put($key, $file, $visibility);
session()->flash('message', $request->title . ' uploaded!');
return redirect()->route('resource-index');
}
3. : ResourceController@show
URL- aws s3, <img> <video>
public function show($id)
{
$resource = Resource::findOrFail($id);
$bucket = env('AWS_BUCKET');
$key = 'resource-'.$resource->id;
$file['url']= 'https://s3.eu-central-1.amazonaws.com/'.$bucket.'/'.$key;
$file['type'] = Storage::getMimetype($key);
return view('resource.show', compact('resource', 'file'));
}
4. , . mime, , .
@extends('layout.base')
@section('title') Show Resource @stop
@section('content')
<h1>Show Resource</h1>
@include('layout.partials.message')
<h2>{{ $resource->title }}</h2>
@if ($file['type'] == 'image/jpeg')
<img src="{!! $file['url'] !!}" alt="">
@else
<video src="{!! $file['url'] !!}" controls></video>
@endif
@stop

s3 url: https://s3.eu-central-1.amazonaws.com/bucketname/resource-22
, URL- . , URL-, , .
, - . , d * mn url access...