rymanalu / laravel-simple-uploader
为Laravel 5提供简单的文件上传功能。
Requires
- php: >=5.5.9
- illuminate/contracts: ^5.0
- illuminate/http: ^5.0
- illuminate/support: ^5.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.8
README
对于一些开发者来说,在Laravel 5中上传文件并将其存储在文件系统/云存储中并不容易也不简单。这个包提供了一种简单的方式来实现这一点,并附带流畅的接口,您可能会喜欢。
安装
首先,通过Composer包管理器安装此包
composer require rymanalu/laravel-simple-uploader
接下来,您应该将UploaderServiceProvider
添加到您的config/app.php
配置文件中的providers
数组
Rymanalu\LaravelSimpleUploader\UploaderServiceProvider::class,
别忘了将Uploader
外观添加到aliases
数组,以便编写更短的代码
'Uploader' => Rymanalu\LaravelSimpleUploader\Support\Uploader::class,
之后,您应该使用vendor:publish
Artisan命令发布Uploader配置。此命令将uploader.php
配置文件发布到您的config
目录
php artisan vendor:publish --provider="Rymanalu\LaravelSimpleUploader\UploaderServiceProvider"
配置
Uploader配置位于config/uploader.php
,您可以根据需要调整默认文件提供者和默认文件可见性。
文件提供者
此包包含两个文件提供者,来自HTTP请求和本地文件系统。在上传文件之前,您可以设置文件提供的位置。示例
Uploader::from('request')->upload('avatar'); // see the supported providers at config/uploader.php // Or you can use the magic methods... Uploader::fromRequest()->upload('file'); Uploader::fromLocal()->upload('/path/to/file'); Uploader::fromUrl()->upload('https://via.placeholder.com/150.png');
如果您在调用Uploader
外观的from
方法之前调用方法,上传程序将假设您想使用默认提供者。
// If your default provider is local, it will automatically use the local provider. Uploader::upload('/path/to/file');
用法
上传文件
现在,上传文件非常简单,就像这样
<?php namespace App\Http\Controllers; use Uploader; use Illuminate\Http\Request; class UserController extends Controller { /** * Change user's avatar. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function changeAvatar(Request $request) { Uploader::upload('avatar'); // } }
upload
方法接受一个请求键或文件所在的位置(基于文件提供者)作为第一个参数,并返回一个布尔值:如果成功则返回true
,如果失败则返回false
。
您可以将一个Closure
回调作为第二个参数传递,如果文件成功上传,则会调用该回调。
// The parameter in the Closure is a full uploaded filename... Uploader::upload('avatar', function ($filename) { Photo::create(['photo' => $filename]); }); Uploader::upload('/path/to/file', function ($filename) { $user = User::find(12); $user->update(['avatar' => $filename]); });
选择文件存储
自动地,Uploader将使用您的默认文件系统磁盘来存储文件。但是,您可以使用uploadTo
方法选择文件存储的位置
// see the supported uploadTo parameter at config/filesystems.php Uploader::uploadTo('s3')->upload('avatar'); // Or you can use the magic methods... Uploader::uploadToS3(); Uploader::uploadToFtp(); Uploader::uploadToLocal(); Uploader::uploadToRackspace();
设置文件夹
也许您想指定文件将要存储的文件夹。只需使用toFolder
方法即可
Uploader::toFolder('photos')->upload('photo');
重命名文件
使用renameTo
方法调整文件名,就像您想要的那样
Uploader::renameTo('my-awesome-videos')->upload('/path/to/video');
如果您忽略此方法,文件将被重命名为随机唯一的名称。
文件可见性
您可以使用setVisibility
方法设置文件可见性
Uploader::setVisibility('public')->upload('avatar');
或者就忽略它,Uploader将根据您的配置设置可见性。
方法链式调用
上述所有方法(除upload
方法外)都是可链式的。您可以在调用upload
方法之前随意调用其他方法。示例
Uploader::from('local')->uploadToS3()->toFolder('banners')->renameTo('cool-banner')->setVisibility('public')->upload('/path/to/banner');
添加自定义文件提供者
实现提供者
您的自定义文件提供者应该实现Rymanalu\LaravelSimpleUploader\Contracts\Provider
接口。此接口包含我们需要实现的一些简单方法。一个Google Drive的示例实现可能如下所示
<?php // You are free to place the providers anywhere you like... namespace App\Uploader\Providers; // Check this interface to see all the docblock for each method... use Rymanalu\LaravelSimpleUploader\Contracts\Provider; class GoogleDrive implements Provider { public function isValid() {} public function getContents() {} public function getExtension() {} public function setFile($file) {} // Or you can use Rymanalu\LaravelSimpleUploader\Support\FileSetter trait to implement this method... }
注册提供者
一旦您的提供者已实现,您就可以使用 UploaderManager
进行注册。为了向管理器添加额外的驱动程序,您可以在 Uploader
面板中使用 extend
方法。您应该从服务提供者的启动方法中调用 extend
方法。您可以从现有的 AppServiceProvider
或创建一个全新的提供者来这样做
<?php namespace App\Providers; use App\Uploader\Providers\GoogleDrive; use Illuminate\Support\ServiceProvider; use Rymanalu\LaravelSimpleUploader\Support\Uploader; // Or just "use Uploader;" if you register the facade in the aliases array in "config/app.php" before... class UploaderServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { Uploader::extend('gdrive', function ($app) { // Return implementation of Rymanalu\LaravelSimpleUploader\Contracts\Provider... return new GoogleDrive; }); } /** * Register bindings in the container. * * @return void */ public function register() { // } }
一旦提供者驱动程序已注册,您就可以在 config/uploader.php
配置文件中使用 gdrive
驱动程序。