artincms / laravel_file_manager
ArtinCMS.com 官方 Laravel 文件管理器包
dev-master
2021-05-30 07:45 UTC
Requires
- hashids/hashids: >=3.0
- intervention/image: >=2.4
This package is auto-updated.
Last update: 2024-09-29 05:02:01 UTC
README
laravel file manager 是一个用于管理用户上传文件并检查 ACL 的包。
- 你可以上传自定义大小的文件,生成下载链接,将文件存储在存储文件夹中,优化图像。
- 生成下载链接
- 将文件存储在存储文件夹中
- 优化图像
- 在上传文件、编辑文件或生成链接时,可以三种裁剪方式裁剪图像。
要求
- PHP >= 7.0
- Laravel 5.5|5.6
如果你想要启用优化,该包将使用以下优化器
安装
快速安装
composer require "artincms/laravel_file_manager"
适用于 Laravel 小于 5.5
在你的 config/app.php 文件中注册提供者和外观。'providers' => [
...,
ArtinCMS\LFM\LFMServiceProvider::class,
]
'aliases' => [
...,
'FileManager' => ArtinCMS\LFM\Facades\FileManager::class,
]
发布供应商
$ php artisan vendor:publish --provider="ArtinCMS\LFM\LFMServiceProvider"如果你更新了包并需要发布供应商,你应该运行
$ php artisan vendor:publish --provider="ArtinCMS\LFM\LFMServiceProvider" --force
迁移表
$ php artisan migrate
向 lfm_file_mime_type 表中添加种子数据
php artisan db:seed --class="ArtinCMS\LFM\Database\Seeds\FilemanagerTableSeeder"
更多安装详情
如果系统上有这些优化器,该包将使用它们
在你的服务器上安装此包
以下是在 Ubuntu 上安装所有优化器的方法
sudo apt-get install jpegoptim sudo apt-get install optipng sudo apt-get install pngquant sudo npm install -g svgo sudo apt-get install gifsicle
以下是安装 MacOS 上的二进制文件的方法(使用 Homebrew)
brew install jpegoptim brew install optipng brew install pngquant brew install svgo brew install gifsicle
要启用包中的优化器,你应该进入 config/laravel_file_manager.php 并设置 'Optimise_image'= true
有关更多信息,您可以访问 image-optimizer
用法
要使用此包,你应该在任何地方使用以下辅助函数,例如在你的控制器中。这个辅助函数- 创建用于显示管理器的 HTML 模态框
- 创建 HTML 模态框按钮
- 设置你的选项
LFM_CreateModalFileManager($section, $options , $insert , $callback , $modal_id , $header , $button_id, $button_content)
其中 $section 是必需的,其他输入是可选的。要使用文件管理器的输出,你应该安装 jQuery 3 和 Bootstrap 4;
- $section = 部分名称,例如 'FileManager'; $options : 是你想要在此包中实现的选项,例如
$options = ['size_file' => 100, 'max_file_number' => 30, 'true_file_extension' => ['png','jpg']];
//the inserted file result is
{
Manager :
available:1,
data :
[{
0 :
{
file :
{
height : "0"
icon : "image"
id : 115
name : "photo2017-04-1512-45-2"
quality : "100"
size : 60187
type : "original"
user : "faramarz"
version : null
width: "0"
},
full_url: "http://127.0.0.1:8000/LFM/DownloadFile/ID/115/original/404.png/100/0/0",
message: "File with ID :115 Inserted",
success:true
url: "/LFM/DownloadFile/ID/115/original/404.png/100/0/0",
full_url_large:"http://127.0.0.1:8000/LFM/DownloadFile/ID/24/small/404.png/100/300/180",
full_url_medium:"http://127.0.0.1:8000/LFM/DownloadFile/ID/24/medium/404.png/100/300/180",
}
}],
view :
{
'list' : 'html grid view code' ,
'grid' : 'html grid view code' ,
'small' :'html small view code' ,
'medium' : 'html thumb view code' ,
'large' : 'html large view code'
}
}
//to show above data to small view you can use this function
function callback(result)
{
$('#show_area_small').html(result.Manager.view.small) ;
}
Manager 是部分名称。为了显示插入的文件,此包提供了 4 种视图。你可以在回调函数中调用这些视图,如上述示例所示。插入的视图是:list、grid、small、medium、large你可以通过:http://www.yourdomain.com/LFM/ShowCategories 访问文件管理器
辅助函数
在本节中,我们描述了一些最有用的函数。你可以在项目中使用这些函数。保存文件
在您的项目中保存文件,您可以使用 LFM_SaveMultiFile 和 LFM_SaveSingleFile。下面我们将解释这两个函数。保存多个文件
这个助手用于在可文件表(fileable table)中保存多个插入的文件。$res = LFM_SaveMultiFile($obj_model, $section, $type , $relation_name , $attach_type)首先,您应该在模型中定义您的形态关系(morph relation)。我们创建文件关系并将其放入 trait 中。为了使用这个关系,您应该在模型中使用它。
public function files()
{
return $this->morphToMany('ArtinCMS\LFM\Models\File' , 'fileable','lfm_fileables','fileable_id','file_id')->withPivot('type')->withTimestamps() ;
}
您可以使用这个 trait 或创建自己的形态关系。$obj_model 是您的模型名称,$section 是您的小节名称,$type 是文件的类型(如音乐、图片、zip 等),它是可选的,默认为 null,$relation_name 是形态关系的名称,默认为 'files',并且使用 $attach_type 您可以选择附加或同步文件。保存单个文件
如果您想在多对一关系中保存文件并将文件_id 保存到您的表模型中,您应该使用这些助手。LFM_SaveSingleFile($obj_model, $column_name, $section,$column_option_name)$obj_model 是您的模型名称(如 $article = new Article),column_name 是您想保存插入 id 的列名称,例如 'default_img_file_id',$section 是小节名称,$column_option_name 是保存选项的列名称(例如以 json 格式保存宽度、高度、质量等)。
直接上传
如果您想在特定路径上传文件,您可以使用这个助手。LFM_CreateModalUpload($section, $callback , $options, $result_area_id , $modal_id , $header , $button_id , $button_content)输入助手函数与 LFM_CreateModalFileManager 相同,但具有不同的 $result_area_id,用于定义上传文件时的区域 ID。您应该在选项中定义您喜欢的路径,如下所示。
$options = ['size_file' => 1000, 'max_file_number' =>5, 'min_file_number' => 2,'show_file_uploaded'=>'medium', 'true_file_extension' => ['png','jpg','zip'],'path'=>'myuploads/sdadeghi'];
加载文件
加载多个文件
for load files (for example you can use this helper functons when you want edit) you can use this helpers function LFM_LoadMultiFile($obj_model, $section, $type = null, $relation_name = 'files')这个助手函数的输入与 LFM_SaveMultiFile 相同,您可以获取文件。记住,您应该在保存和加载文件时使用相同的 section 名称。您可以在加载文件后删除文件或插入新文件。
加载单个文件
对于加载单个文件,您可以如下使用这个助手:LFM_loadSingleFile($obj_model, $column_name, $section, $column_option_name = false)这个助手函数的输入与 LFM_SaveSingleFile 相同。只是记得您在保存和加载文件时应该使用相同的 section 名称。您可以在加载文件后删除文件或插入新文件。
显示文件
显示多个文件
要显示插入的文件,您可以使用这个助手函数。LFM_ShowMultiFile($obj_model, $type, $relation_name )与 LFM_LoadMultiFile 的不同之处在于,您不能删除文件。
显示单个文件
要显示单个文件,您可以使用这个助手函数。记住,您不能删除文件。LFM_ShowingleFile($obj_model, $column_name, $column_option_name)
生成链接
生成下载链接
使用下面的助手函数,您可以在项目的任何位置生成下载链接。LFM_GenerateDownloadLink($type, $id , $size_type, $default_img, $quality , $width, $height)
- 如果您想通过 ID 生成文件链接,则 $type = 'ID';如果您想通过名称生成,则可以使用 $type = 'Name'。
- $id:如果您想通过 ID 生成链接,则应在此项中填写文件 ID,默认为 -1,表示未选择任何文件 ID。
- $size_type 可以选择以下之一:original,large,medium,small,这表示您想下载哪个大小的文件。
- 如果未找到与 $default_img 相关的图像,您可以选择要显示的图像,默认为 '404.png'。
- $quality 是图像的质量,介于 0 和 100 之间。
- $width 是结果图像的宽度。
- $height 是结果图像的高度。
生成 Base64 图像
使用以下辅助函数,您可以创建Base64图像。LFM_GetBase64Image($file_id, $size_type, $not_found_img , $inline_content , $quality , $width , $height )此辅助函数的配置如上所示,但使用不同的$inline_content。如果它为真,您就可以创建Base64图像。
生成公开链接
如果您从存储/public_folder在您的公共文件夹中创建快捷方式,您可以直接访问文件。如以下框所示,您可以使用此辅助函数创建公共下载路径LFM_GeneratePublicDownloadLink($path,$filename)$psth是文件路径,$filename是磁盘文件名。例如,您想访问网站标志图片,您可以将此文件上传到公共文件夹,并使用上述辅助函数直接访问。
自定义配置
如果您想自定义配置,您可以按照您的要求更改config/laravel_file_manager.php文件。
- 'private_middlewares'和'public_middlewares'描述了应分配给私有和公开路由的中件,您可以添加auth和其他您想要的中件。
- 使用'private_route_prefix'和'public_route_prefix',您可以更改私有和公开路由的前缀。
- 'allowed'指的是可以上传的文件类型。
- 'allowed_pic'指的是被识别为图片的文件类型。
- 使用'size_large'、'size_medium'、'size_small'和'size_preview',当上传文件时,您可以根据类型定义上传的大小。
- 'driver_disk'是您在项目中使用的驱动器。
- 'user_model'是您的用户模型路径。
- 'Optimise_image'如果为真,并且配置与安装部分所述一致,则所有图片在存储之前都将进行优化。
- 使用'crop_type',您可以选择在上传文件时(当创建大、中、小尺寸的图片时)使用哪种裁剪类型。您可以将它设置为以下之一:fit、resize和smart,其中'fit'是默认裁剪,resize会根据您设置的配置大小调整图像,而smart是智能裁剪,但比其他裁剪类型慢。
示例
完整示例LFM_SaveMultiFile和LFM_SaveSingleFile的示例
在这个例子中,我们将zip文件和用户个人资料图片分配给文章并保存。首先,在路由中
Route::get('/MultiFile', 'HomeController@multiSection')->name('multiSection');
Route::get('/MultiFile/{id}', 'HomeController@multiSectionEdit')->name('multiSectionEdit');
Route::get('/ShowMultiFile/{id}', 'HomeController@showMultiFile')->name('showMultiFile');
Route::post('/StoreArticle', ['as' => 'StoreArticle', 'uses' => 'HomeController@StoreArticle']);
Route::post('/StoreEditArticle', ['as' => 'StoreEditArticle', 'uses' => 'HomeController@StoreEditArticle']);
您应该在文章模型中定义您的关联use ArtinCMS\LFM\Traits\lfmFillable ;
use ArtinCMS\LFM\Models\File;
class Article extends Model
{
use lfmFillable;
}
如您所见,多部分路由用于保存带有zip文件和个人资料图片的文章。在您的控制器中 public function multiSection()
{
$optionsAttach = ['size_file' => 100, 'max_file_number' => 5, 'true_file_extension' => ['zip']];
$option_single = ['size_file' => 100, 'max_file_number' => 1, 'true_file_extension' => ['png','jpg']];
$attach = LFM_CreateModalFileManager('Attach',$optionsAttach , 'insert','showAttach');
$single = LFM_CreateModalFileManager('Single',$option_single , 'insert','showSingle');
return view('multiSection',compact('attach','single'));
}
public function multiSectionEdit($id)
{
$optionsAttach = ['size_file' => 100, 'max_file_number' => 5, 'true_file_extension' => ['zip']];
$option_single = ['size_file' => 100, 'max_file_number' => 1, 'true_file_extension' => ['png','jpg']];
$attach = LFM_CreateModalFileManager('Attach',$optionsAttach , 'insert','showAttach');
$article = Article::find($id);
$load_attch = LFM_LoadMultiFile($article,'Attach','zip','files') ;
$single = LFM_CreateModalFileManager('Single',$option_single , 'insert','showSingle');
$load_single = LFM_loadSingleFile($article,'default_img_file_id','Single');
return view('multiSectionedit',compact('attach','single','load_attch','load_single','article'));
}
public function showMultiFile ($id)
{
$article = Article::find($id);
$show_attch = LFM_ShowMultiFile($article,'zip','files') ;
$show__single = LFM_ShowingleFile($article,'default_img_file_id','Single');
return view('showMultiFile',compact('show_attch','show__single','article'));
}
public function StoreArticle(Request $request)
{
$article = new Article ;
$article->title = $request->title ;
$article->body = $request->body ;
$article->save() ;
$res['Attach'] = LFM_SaveMultiFile($article,'Attach','zip','files' , 'attach');
$res['Single'] = LFM_SaveSingleFile($article,'default_img_file_id','Single','options');
return $res ;
}
public function StoreEditArticle(Request $request)
{
$article =Article::find($request->id);
$res['Attach'] = LFM_SaveMultiFile($article,'Attach','zip','files' , 'sync');
$res['Single'] = LFM_SaveSingleFile($article,'default_img_file_id','Single','options');
return $res ;
}
并在multisection.blade.php中
{!! $attach['button'] !!}
{!! $attach['modal_content'] !!}
div#show_area_Attach_list
function showAttach(res) {
$('#show_area_Attach_list').html(res.Attach.view.list) ;
$('#show_area_Attach_grod').html(res.Attach.view.grid) ;
$('#show_area_Attach_small').html(res.Attach.view.small) ;
$('#show_area_Attach_medium').html(res.Attach.view.medium) ;
$('#show_area_Attach_large').html(res.Attach.view.large) ;
}
以及在multisectioneditl.blade.php中
{!! $attach['button'] !!}
{!! $attach['modal_content'] !!}
div#show_area_Attach {!! $load_attch['view']['list'] !!}
function showAttach(res) {
$('#show_area_Attach').html(res.Attach.view.list,'slider') ;
}