rymanalu/laravel-simple-uploader

为Laravel 5提供简单的文件上传功能。

v1.1.1 2018-11-09 02:44 UTC

This package is auto-updated.

Last update: 2024-09-11 00:10:26 UTC


README

Build Status Total Downloads Latest Stable Version License

对于一些开发者来说,在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 驱动程序。