将奏鸣曲媒体与奏鸣曲格式化程序ckeditor集成的图像限制文件大小
Posted
技术标签:
【中文标题】将奏鸣曲媒体与奏鸣曲格式化程序ckeditor集成的图像限制文件大小【英文标题】:Limit file size of image integrating sonata media with sonata formatter ckeditor 【发布时间】:2019-08-15 11:07:27 【问题描述】:我尝试将奏鸣曲媒体与奏鸣曲格式化程序集成在一起,一切都很好,但我有两个问题。
-
我可以限制文件大小吗?
为什么不运行 MIME 类型验证?
我跟踪了奏鸣曲格式化程序代码,并在 CkeditorAdminController::uploadAction (https://github.com/sonata-project/SonataFormatterBundle/blob/4.x/src/Controller/CkeditorAdminController.php#L93) 中看到控制器不检查表单是否有效,也不检查媒体是否有效。
另一方面,如果上传发生错误,ckeditor 只会显示服务器返回的错误页面,但不会再次显示输入文件小部件。
【问题讨论】:
【参考方案1】:我终于设法让它扩展了默认和自定义 CkeditorAdminExtension 的控制器
namespace MediaBundle\Admin;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\FormatterBundle\Admin\CkeditorAdminExtension;
/**
* Adds browser and upload routes to the Admin.
*
* @author Kévin Dunglas <kevin@les-tilleuls.coop>
*/
// we override routing definitions
class CustomCkeditorAdminExtension extends CkeditorAdminExtension
public function configureRoutes(AdminInterface $admin, RouteCollection $collection)
$collection->add('ckeditor_browser', 'ckeditor_browser', [
'_controller' => 'MediaBundle:CustomCkeditorAdmin:browser',
]);
$collection->add('ckeditor_upload', 'ckeditor_upload', [
'_controller' => 'MediaBundle:CustomCkeditorAdmin:upload',
]);
控制器:
namespace MediaBundle\Controller;
use Sonata\FormatterBundle\Controller\CkeditorAdminController;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Response;
class CustomCkeditorAdminController extends CkeditorAdminController
CONST MAX_IMAGE_FILE_SIZE = 200 * 1024; // 200 K
CONST VALID_IMAGE_MIME_TYPES = ['image/pjpeg', 'image/jpeg', 'image/png', 'image/x-png'];
public function uploadAction()
$request = $this->get('request_stack')->getCurrentRequest();
if($request->isMethod('POST'))
$file = $file = $request->files->get('upload');
if($file instanceof UploadedFile)
if($file->getSize() > self::MAX_IMAGE_FILE_SIZE)
return new Response('Too big file');
if(!in_array($file->getMimeType(), self::VALID_IMAGE_MIME_TYPES))
return new Response('File is not a valid image');
return parent::uploadAction();
最后覆盖parameters.yml中的Extension参数
parameters:
sonata.formatter.ckeditor.extension.class: "MediaBundle\\Admin\\CustomCkeditorAdminExtension"
【讨论】:
以上是关于将奏鸣曲媒体与奏鸣曲格式化程序ckeditor集成的图像限制文件大小的主要内容,如果未能解决你的问题,请参考以下文章
集成 Sonata Media Bundle(媒体实体)和 Sonata Classiffication Bundle(标签实体)