almazik/laravel-uploader

一个允许您轻松处理从不同来源上传文件到服务器的包。

0.2.5 2016-03-16 03:57 UTC

This package is auto-updated.

Last update: 2024-09-13 20:20:08 UTC


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();