cyrodjohn / l5-media-manager
创建一个惊人的用户界面,用于上传和管理工作媒体文件。这是 https://github.com/JoanVt/L5-media-manager 的分支。
Requires
- php: >=5.4.0
- intervention/image: 2.*
This package is not auto-updated.
Last update: 2024-09-18 22:21:59 UTC
README
##Laravel 5.1 和 Bootstrap 3 的简单优雅媒体管理器。
演示
添加
列表
信息
在 composer.json 中编辑您所需的依赖项: "joanvt/l5-media-manager": "dev-master"
####第1步 - 使用 CMD Composer 执行: composer update
####第2步 - 然后,使用 CMD PHP 执行: php artisan vendor:publish
####第3步 - 现在,只需在您的 config/app.php 中添加提供者类
Joanvt\MediaManager\MediaManagerServiceProvider::class
####第4步 - 迁移数据库。使用 CMD PHP 执行: php artisan migrate
####第5步 - 创建您的媒体模型(如果您想定义它,可以在 config/app.php 中使用别名)
namespace app\Models;
use Illuminate\Database\Eloquent\Model;
class MyMediaClass extends Model {
protected $table = 'media';
protected $fillable = ['name','path','description','ext','gallery_id','status'];
protected $guarded = ['id'];
}
####第6步 - 使用我们的三个方法创建视图,并在 "lists" 方法中包含您的查询
{!! Joanvt\MediaManager\MediaManager::styles() !!}
{!! Joanvt\MediaManager\MediaManager::lists(Media::where('status','A')->orderBy('id','DESC')) !!}
{!! Joanvt\MediaManager\MediaManager::scripts() !!}
####第7步 - 创建请求验证器(app/Http/Requests)
<?php
namespace app\Http\Requests;
use app\Http\Requests\Request;
class MediaFilesRequest extends Request {
public function authorize() {
return true;
}
public function rules() {
return [
'upl' => 'required|image|mimes:jpeg,bmp,png,gif|max:2000', // 2 Megas
];
}
public function messages() {
return [
'upl.required' => 'You have to upload some file',
'upl.max' => '2MB max size',
'upl.mimes' => 'Not a valid file'
];
}
}
####第9步 - 创建您的 Ajax 控制器,如下所示,并包含您的文件请求器
<?php
namespace app\Http\Controllers;
use Illuminate\Routing\UrlGenerator;
use Redirect;
use Auth;
use app\Http\Requests\MediaFilesRequest;
use app\Http\Requests\MediaFilesDeleteRequest;
use Config;
use File;
use Media;
use Image;
class AjaxController extends Controller {
protected $url;
// ------------------------------------------------------------------
public function __construct(UrlGenerator $url) {
$this->url = $url;
$this->middleware('isAjax');
$this->middleware('isAdmin');
}
public function index(MediaFilesRequest $request){
$file = $request->file('upl');
if(!$file->isValid()){
return abort(405);
}
if(!file_exists(public_path(Config::get('jmedia.upload_path')))){
File::makeDirectory(public_path(Config::get('jmedia.upload_path')), 0777,true);
}
if(!file_exists(public_path(Config::get('jmedia.upload_path').'/'.Config::get('jmedia.thumbnail_directory')))){
File::makeDirectory(public_path(Config::get('jmedia.upload_path').'/'.Config::get('jmedia.thumbnail_directory')), 0777,true);
}
$name = md5(uniqid()).$file->getClientOriginalName();
$request->file('upl')->move(public_path(Config::get('jmedia.upload_path')), $name.'.'.$file->getClientOriginalExtension());
$create = Media::create([
'name' => $name,
'path' => Config::get('jmedia.upload_path'),
'description' => '',
'ext' => $file->getClientOriginalExtension(),
'status' => 'A'
]);
$width = Config::get('jmedia.width_thumbnail');
$height = Config::get('jmedia.height_thumbnail');
$image = Image::make(Config::get('jmedia.upload_path').'/'.$name.'.'.$file->getClientOriginalExtension());
$path = public_path(Config::get('jmedia.upload_path').'/'.Config::get('jmedia.thumbnail_directory'));
$image->resize($width,$height);
$image->save($path.'/'.$name.$width.'x'.$height.'.'.$file->getClientOriginalExtension());
return $create->toJson();
}
public function delete_image(MediaFilesDeleteRequest $request){
$error = [];
$request->get('ref');
$file =Media::find($request->get('ref'));
$width = Config::get('jmedia.width_thumbnail');
$height = Config::get('jmedia.height_thumbnail');
$file_deleted = File::delete(public_path(Config::get('jmedia.upload_path').'/'.$file->name.'.'.$file->ext));
if($file_deleted){
// Once deleted the file, then we must delete the thumbnail
$thumb_delete = File::delete(public_path(Config::get('jmedia.upload_path').'/'.Config::get('jmedia.thumbnail_directory').'/'.$file->name.$width.'x'.$height.'.'.$file->ext));
if(!$thumb_delete){
$error['thumb'] = 'Thumbnail couldn\'t be deleted, delete it manually or check permissions.';
}
}else{
$error['file'] = 'File couldn\t be deleted, try it manually or check permissions.';
}
$file->delete();
if(count($error) > 0){
return $error->toJson();
}
}
}
####第10步 - 您可以在 config/jmedia.php 中配置一些有关文件上传的参数
return [
'upload_route' => url('ajax/upload_files/'),
'upload_path' => 'uploads/'.date('d-m-Y'),
'thumbnail_directory' => 'thumbnails',
'width_thumbnail' => 200,
'height_thumbnail' => 200
];
####第11步 - 创建您的路由监听器(routes.php)
Route::post('ajax/upload_files', 'AjaxController@index');
Route::post('ajax/upload_files/delete', 'AjaxController@delete_image');
##提示
####使用 .htaccess 避免执行某些二进制文件,例如: php_flag engine off
#####(图像别名)Intervention 依赖 我们使用 "intervention/image": "2.*" 依赖项进行图像处理。您也可以使用原生 PHP
#####创建一个 "isAjax" 中间件
<?php namespace app\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
use Illuminate\Http\RedirectResponse;
class isAjax implements Middleware {
public function handle($request, Closure $next)
{
if ($request->ajax()){
return $next($request);
}else{
return new RedirectResponse(url('/'));
}
}
}
#待办事项列表
-- Add Gallery (Table created but not implemented yet)