kwaadpepper / laravel-omen
又一个 Laravel 文件管理器
Requires
- php: >=7.1
- intervention/image: 2.*
- jenssegers/date: 4.*
Requires (Dev)
- derekmd/laravel-dusk-firefox: ^1.1
- dms/phpunit-arraysubset-asserts: ^0.2.0
- orchestra/testbench: ^5.3
- orchestra/testbench-dusk: ^5.2
Suggests
- ext-gd: to use GD library for image crop and resize
- ext-imagick: to use Imagick for image crop and resize
- dev-master
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
- dev-dependabot/composer/symfony/http-kernel-5.4.20
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/npm_and_yarn/express-4.18.2
- dev-dependabot/npm_and_yarn/qs-6.5.3
- dev-dependabot/npm_and_yarn/decode-uri-component-0.2.2
- dev-dependabot/composer/guzzlehttp/guzzle-7.4.5
- dev-release
This package is auto-updated.
Last update: 2024-09-30 02:10:39 UTC
README
Omen 文件管理器
这是一个正在进行中的项目
A 编译
只需运行 yarn install
然后运行 yarn dev
或 yarn prod
B 在 Laravel 中安装测试
目前
-
将此添加到使用 composer 的 Laravel 项目中,您可以将此用作本地项目,在您的 composer.json 中
"repositories": { "kwaadpepper/laravel-omen": { "type": "path", "url": "pathTo/laravel-omen-git-pull-from-github.git", "options": { "symlink": true } } },
-
然后运行
composer require kwaadpepper/laravel-omen
-
导航到 vendor/kwaadpepper/laravel-omen 并运行
yarn prod
,然后在您的 Laravel 项目中访问 URL/omenfilemanager
您可以使用 --tag=config, --tag=assets, --tag=views, --tag=lang
覆盖
php artisan vendor:publish --provider="Kwaadpepper\Omen\Providers\OmenServiceProvider" --tag=assets
如果您使用本地存储且不需要将文件设置为私有,则可以使用此方法
sudo php artisan omen:link
注意
-
关于贡献
请报告发现的任何漏洞或方便时创建 PR。欢迎每个人。如果您愿意,您可以在关于页面上可见的贡献者名单中。您的 GitHub 信息(姓名和电子邮件,或仅姓名)将用于提交(如果您在 PR 中明确声明)。您必须同意以 MIT 许可证发布,因为项目许可证已定义为当前状态。您的贡献将首先进行审查,然后再合并。请参阅 PR 部分。如果您想报告某些内容,只需打开问题票据。
-
关于 CSRF
使用 Laravel 内置的 CSRF 系统令牌。此外,每个请求(即使只有写操作需要它)都使用 Ajax CSRF 令牌。
-
关于 CSP 策略
https://cheatsheetseries.owasp.ac.cn/cheatsheets/Content_Security_Policy_Cheat_Sheet.html
此库使用 nonce 在所有其资产要求(CSS、JS)上使用 CSP 策略。这可以通过配置文件('omen.csp')进行配置
-
关于 X-Frame-Options
X-Frame-Options 发送给客户端以防止点击劫持(iframe 嵌入)https://www.keycdn.com/blog/x-frame-options false => X-Frame-Options: deny true => X-Frame-Options: sameorigin
-
关于 X-Content-Type-Options
用于对抗 MIME 嗅探以防止跨站脚本。因此,任何由服务器提供的文件都将按服务器声明的类型处理 https://www.keycdn.com/support/x-content-type-options 这始终设置为 no sniff,且不可配置
-
关于 Referrer-Policy
https://openweb.eu.org/articles/referrer-policy
Omen 不需要跟踪,而且它也不想被跟踪。因此,Referrer-Policy 设置为 no-referrer。由于没有需要,因此不可配置
-
关于 Feature-Policy
https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Feature-Policy
所有启用的功能都设置为 self,因为 Omen 提供了所有库。出于安全目的,不使用 CDN。此外,为了在离线网络上启用使用,唯一的使用是
-
视频的自动播放
-
多文件类型视图的全屏
-
布局动画以显示 Omen 界面
-
遗留图像格式
此策略控制文档在旧版图像格式中渲染图像的能力。这些格式定义为除了JPEG、PNG、GIF、WEBP或SVG之外的所有格式。TODO 检查图像格式的显示可能性
-
midi
TODO midi文件可以播放吗?
-
导航覆盖
-
超大图像
-
视频播放中的画中画
-
sync-xhr 用于Ajax查询
加速度计 'none'; 环境光传感器 'none'; 自动播放 'self'; 电池 'none'; 摄像头 'none'; 显示捕获 'none'; 文档域名 'none'; 加密媒体 'none'; 非渲染时的执行 'none'; 视口外的执行 'none'; 全屏 'self'; 地理位置信息 'none'; 惯性传感器 'none'; 布局动画 'self'; 旧版图像格式 'self'; 磁力计 'none'; 麦克风 'none'; midi 'self'; 导航覆盖 'self'; 超大图像 'self'; 支付 'none'; 画中画 'self'; 公钥凭证获取 'none'; sync-xhr 'self'; USB 'none'; VR 'none'; 睡眠锁 'none'; xr-spatial-tracking 'none';
-
-
关于最大上传大小
由于上传是通过Ajax处理的,yt必须在
php.ini
或.htaccess
中更改,需要更改两个值:'upload_max_filesize'和'post_max_size'您可以将此放入
public/.htaccess
php_value post_max_size 2M php_value upload_max_filesize 2M
由于上传是通过Ajax处理的,它发送2M大小的块。然后如果您想设置一个限制,只需将maxUploadSize更改为类似
'3M'
或3145728
的值即可 -
关于文件名
文件名在创建时总是小写的,这是为了与Windows兼容,因为Windows文件名不区分大小写,这意味着Windows会将'file.pdf'和'File.pdf'视为相同的文件,而在基于Unix的系统上则不会。
-
关于单元测试
使用Orchestra包含单元测试,只需在
composer install
后从项目文件夹中运行phpunit
-
关于Tinymce
为了与tinymce一起使用,您必须将useXFrameOptions设置为true,以便允许在iframe中显示omen
这里有一个示例,您必须使用指令
external_filemanager_path
设置@omenPath()
,并使用指令external_plugins
注册omen插件{ "omen": "@tinymcePluginPath()" }
tinymce.init({ selector: "#tinymce" , plugins: [ "advlist autolink link image lists charmap print preview hr anchor pagebreak" , "searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking" , "table directionality emoticons paste omen code" ] , toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | styleselect" , toolbar2: "| omen | link unlink anchor | image media | forecolor backcolor | print preview code " , image_advtab: true , external_filemanager_path: "@omenPath()" , external_plugins: { "omen": "@tinymcePluginPath()" } });
-
关于CKEditor
与CKEditor一起使用时不需要iframe授权。但是,您必须将其设置为默认文件管理器。您必须使用此指令
filebrowserImageBrowseUrl
设置@omenPath(type=image&editor=ckeditor)
,并且可以最终使用此指令filebrowserBrowseUrl
@omenPath(editor=ckeditor)CKEDITOR.editorConfig = function(config) { config.language = "en"; config.uiColor = "#F7B42C"; config.height = 300; config.toolbarCanCollapse = true; config.extraPlugins = "omen"; config.filebrowserImageBrowseUrl = "@omenPath(type=image&editor=ckeditor)"; config.filebrowserBrowseUrl = "@omenPath(editor=ckeditor)"; }; CKEDITOR.replace("ckeditor");
一些值得了解的事情是,可以使用url指令限制要使用的文件类型:例如,添加url GET参数type=image
以仅使用图像或type=archives
-
关于独立按钮
如果您想调用文件管理器,可以使用独立按钮。
首先在您的HTML文件中插入插件(需要
jquery
)<html> ... <head> ... @omenButton() </head> ... </html>
在您的页面上创建一个输入
<div class="input-group"> <span class="input-group-btn"> <a id="omenButton" data-input="textInput" class="btn btn-primary"> <i class="fa fa-picture-o"></i> Open file </a> </span> <input id="textInput" class="form-control" type="text" name="filepath"> </div>
在按钮上调用插件
$(document).ready(function() { $('#omenButton').omenButton('image'); });
omenButton
函数接受文件、图像、音频、视频、存档,如果您想限制文件类型如果您想通过js弹出窗口调用文件管理器,可以查看
resources/js/plugins/omen.Button.jquery.plugin.min.js
Whishlit
- tinymce和CKEditor的跨域支持?
- 视频流,可选的ffmpeg => Mpeg-Dash或HLS? https://github.com/pascalbaljetmedia/laravel-ffmpeg
- 按比例调整图像大小的功能
- 全局搜索文件
- 更改可见性
- 更多全局操作,如批量删除
- 使用图像缩略图
- 允许删除非空目录,确认删除非空目录
- 更多前端单元测试与Dusk
- 使用chromium测试函数
- 在移动设备上进行广泛的测试
- 制作按钮重置过滤器
Jérémy Munsch
https://jereymdev.ovh/contact
gitub@jeremydev.ovh