unisharp / laravel-fileapi
Laravel 文件 API - 使用 Laravel 存储 handle 文件
v1.0.2
2017-11-14 02:42 UTC
Requires
- php: >=5.5.0
- ext-gd: *
- illuminate/support: >=5.0.0
- league/flysystem: >=1.0
- symfony/http-foundation: >=2.0
This package is auto-updated.
Last update: 2024-09-15 15:23:09 UTC
README
功能
- 使用 Laravel 存储 handle 文件。
- 通过 Laravel 路由加载文件,而不是公共路径。
- 保存带有缩略图、压缩图像和可自定义大小的图片。
安装
-
安装 File API
composer require unisharp/laravel-fileapi
-
在
config/app.php
中设置服务提供者Unisharp\FileApi\FileApiServiceProvider::class,
-
发布配置文件
php artisan vendor:publish --tag=fileapi_config
配置
在 config/fileapi.php
中
-
填写存储路径,它会为您生成路由。
'path' => ['/images/event/', '/images/article/'],
它会生成如下路由
Route::get('/images/event/{filename}', function ($filename) { $entry = new \Unisharp\FileApi\FileApi('/images/event/'); return $entry->getResponse($filename); }); Route::get('/images/article/{filename}', function ($filename) { $entry = new \Unisharp\FileApi\FileApi('/images/article/'); return $entry->getResponse($filename); });
-
设置默认缩略图大小(键值对)
'default_thumbs' => ['S' => '96x96', 'M' => '256x256', 'L' => '480x480'],
-
设置默认图像压缩质量
'compress_quality' => 90,
-
选择是否通过 URL(API)直接启用上传
'enable_api_upload' => false,
并通过以下 URL 上传
POST /upload/images/event/the-file-name
-
您可能还想设置一些中间件来保护上传路由
'middlewares' => [],
用法
初始化 File API
use \Unisharp\FileApi\FileApi; $fa = new FileApi(); # use default path (as '/images/') $fa_event = new FileApi('/images/event/'); # initialize it by giving a base path $fa_article = new FileApi('/images/article/'); # initiate another instance
通过上传的文件保存
-
默认用法:获取唯一文件名
$file = $fa->save(\Input::file('main_image')); // => wfj412.jpg
-
自定义上传文件名
$file = $fa->save(\Input::file('main_image'), 'custom-file-name'); // => custom-file-name.jpg
-
默认情况下将设置三个缩略图(等比例缩放)
缩略图功能
-
设置自定义缩略图大小
$file = $fa ->thumbs([ 'S' => '150x100', 'M' => '300x200', 'L' => '450x300' ]) ->save(\Input::file('main_image'));
-
制作裁剪缩略图
$file = $fa->crop()->save(\Input::file('main_image'));
获取图像 URL
// large size $fa->get('wfj412.jpg'); $fa->get('wfj412.jpg', 'L'); $fa->get('wfj412.jpg', FileApi::SIZE_LARGE); // medium size $fa->get('wfj412.jpg', 'M'); $fa->get('wfj412.jpg', FileApi::SIZE_MEDIUM); // full size $fa->get('wfj412.jpg', 'full'); $fa->get('wfj412.jpg', FileApi::SIZE_ORIGINAL); // comporssed $fa->get('wfj412.jpg', 'CP'); // => get image url of compressed one
删除图像和缩略图
$fa->drop('wfj412.jpg');
获取文件完整路径(从 Laravel 存储抽象路径)
$fa->getPath('wfj412.jpg'); // => '/images/event/wfj412.jpg'
解析文件路径到 URL
如果您将文件存储在云存储中,并希望获取云站点的 URL,可以使用 url() 方法获取
echo $fa->getUrl('wfjsdf.jpg'); // => "https://s3-ap-northeast-1.amazonaws.com/xxx/xxx/55c1e027caa62L.png"
与 Laravel 存储一起使用
-
获取文件内容
\Storage::get($fa->getPath('wfj412.jpg'));
-
写入文件
\Storage::put($fa->getPath('wfj412.jpg'));
-
获取 MIME 类型
\Storage::mimeType($fa->getPath('wfj412.jpg'));
自动上传
如果 config/fileapi.php
中的 enable_api_upload=true
,您可以将文件上传到这两个路径
-
图像
-
头部
POST /api/v1/images/{target}/{param?}
-
主体
image={file multipart body}
-
-
视频
-
头部
/api/v1/videos/{target}/{param?}
-
主体
video={file multipar body}
-
上传后
您添加事件监听器以在文件上传后完成,文件 API 将触发 image.{target}.created
和 video.{target}.created
步骤
-
在
App\Listeners
下编写监听器<?php namespace App\Listeners; class ArticleImageListener { public function handle($param, $filename, $path) { ... do something ... } }
-
在
Providers\EvnetService\Providers
中编写事件映射protected $listen = [ 'image.article.created' => [ 'App\Listeners\ArticleImageListener' ], ];
配置
'enable_api_upload' => false, // auto upload api
'api_prefix' => '/api/v1', // upload api url prefix
'middlewares' => [], // middlewares that wrap the api upload route