Laravel 5 + CKEditor = простой Fileuploader

test
CKEditor Нужно мне к очередному проекту прикрутить CKEditor + простой загрузчик файлов. Использовать внешний загрузчик не вижу смысла, а тот интерфейс который предоставляет нам CKEditor для загрузки файлов нам вполне годиться. Сам проект использует базовый фреймворк Laravel 5.
Создаем контроллер для загрузки файлов, выполнив команду из консоли:
php artisan make:controller Fileuploader

Создаем Storage-диск в конфиге filesystems.php:
'uploaded' => [
            'driver' => 'local',
            'root'   => storage_path().'/public/images/uploaded',
        ],

Сам код контроллера, отвечающий за загрузку файлов:
<?php namespace App\Http\Controllers;

use App\Http\Requests;
use Illuminate\Support\Facades\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use Illuminate\Http\Response;

class Fileuploader extends BaseController {

public function upload(){
//переменная пришедшая к нам с самим запросом от CKEditor
        $callback = $_GET['CKEditorFuncNum'];
        $error = '';
        $file = Request::file('upload'); //Сам файл
//создаем ему уникальное название, чтобы нечаянно не перезаписать что-то
        $filename = md5(date("YmdHis").rand(5,50));
//получаем разрешение файла
        $extension = $file->getClientOriginalExtension();
//сохраняем файл в хранилище
        Storage::disk('uploaded')->put($filename.'.'.$extension,  File::get($file));
//формируем ссылку для ответа
        $http_path = '/images/uploaded/'.$filename.".".$extension;
//собственно сам ответ CKEditor-у
        echo "<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(".$callback.",  "".$http_path."", "".$error."" );</script>";
    }
}

В конфиге CKEditor добавляем строку с URL обработки загрузки файлов, можно прямо в config.js добавить, можно при вызове:
CKEDITOR.replace( 'body', {
            filebrowserUploadUrl: '/uploader',
        } );

Так как с токенами csrf при отправке файлов возникнут проблемы(если не отключать сервис проверки токенов то возникнут), меняем код функции в файле Middleware\VerifyCsrfToken.php на тот который позволяет делать нам исключения для нужных нам роутов:
public function handle($request, Closure $next)
    {
        $route = Route::getRoutes()->match($request);
        $routeAction = $route->getAction();
//если роут добавлен в исключение, пропускаем
        if (isset($routeAction['nocsrf']) && $routeAction['nocsrf']) {
            return $next($request);
        }
        return parent::handle($request, $next);
    }

Добавляем роут для контроллера загрузки, указывая для него исключение проверки csrf-токена:
Route::group(['prefix'=>'uploader','nocsrf' => true],function(){
        Route::match(['get','post'],'/','Fileuploader@upload');
    });

Собственно все. Таким образом я прикрутил простую загрузку файлов в CKEditor 4.
Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!