almazik / laravel-uploader
一个允许您轻松处理从不同来源上传文件到服务器的包。
Requires
- php: >=5.4.0
README
如果你像我一样,你可能发现自己需要从应用程序到应用程序处理文件上传,而你只是手动重复做同样的事情。这应该是重复的吗? 不是。
相反,将这项工作委托给只负责上传文件的包。
安装
通过Composer引入此包。
{ "require": { "almazik/laravel-uploader": "dev-master" } }
然后你需要引用服务提供者类。将此行插入到你的config/app.php
文件中,只需将其附加到providers
数组。
Almazik\LaravelUploader\FileUploaderServiceProvider::class,
为了方便起见,你可能还想引用外观。
'Uploader' => Almazik\LaravelUploader\Facades\Uploader::class,
用法
假设我们有一个用于上传文件的表单,以及一个处理其POST请求的控制器方法。
下面是一个示例。
use Uploader; use Illuminate\Http\Request; class SomeController extends Controller { public function upload(Request $request) { Uploader::file($request->file('file')); Uploader::push('path/where/to/save'); } }
如果你不想使用外观,请使用依赖注入
use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Almazik\LaravelUploader\Contracts\Uploader; class SomeController extends Controller { protected $uploader; public function __construct(Uploader $uploader) { $this->uploader = $uploader; } public function upload(Request $request) { $this->uploader ->file($request->file('file')) ->push('path/to/store/file'); } }
你可以链式调用方法。
输入来源
目前该包支持2种输入类型:通过表单上传的文件(如上所述)和文件的base64编码版本。
假设你正在集成某种第三方API,该API将以base64编码格式发送文件。很简单
class SomeController extends Controller { protected $uploader; public function __construct(Uploader $uploader) { $this->uploader = $uploader; } public function upload(Request $request) { $encoded = $this->someService->getBase64Encoded(); $this->uploader ->file($encoded) ->filename('foobar.jpg') ->push('path/to/store/file'); } }
请注意,在这种情况下,你可能需要显式指定要使用的文件名,因为包本身将尝试查找给定的文件MIME类型并将其与扩展名关联,但这并不总是100%有效,因为并非每个MIME类型都有固定的扩展名。
目的地
该包使用Laravel的文件系统,因此它支持所有驱动程序,如Laravel:本地、s3、ftp、rackspace。
请确保检查config/filesystem.php
中的配置,以设置文件上传的路径。
例如,假设在你的config/filesystem.php
中,你的默认驱动程序设置为s3。
'default' => 's3', 'disks' => [ 's3' => [ 'driver' => 's3', 'key' => env('S3_KEY'), 'secret' => env('S3_SECRET'), 'region' => env('S3_REGION'), 'bucket' => env('S3_BUCKET'), ], ]
使用这些设置,你的文件将被上传到作为根目录的存储桶,路径是通过推送方法的参数传递的。
文件名
默认情况下,文件将使用原始文件名上传,前面加上当前时间戳,并将所有空格替换为下划线。如果你想覆盖这一点,你可以在调用push
方法之前这样做
Uploader::filename('foo.png');
持久化
上传文件后,你可能想将路径保存到数据库中,对吧?没问题,在上传文件后,只需像这样获取完整路径即可
$fullPath = Uploader::getFullPath();