【问题标题】:Limit file size of image integrating sonata media with sonata formatter ckeditor将奏鸣曲媒体与奏鸣曲格式化程序ckeditor集成的图像限制文件大小
【发布时间】:2019-08-15 11:07:27
【问题描述】:

我尝试将奏鸣曲媒体与奏鸣曲格式化程序集成在一起,一切都很好,但我有两个问题。

  1. 我可以限制文件大小吗?
  2. 为什么不运行 MIME 类型验证?

我跟踪了奏鸣曲格式化程序代码,并在 CkeditorAdminController::uploadAction (https://github.com/sonata-project/SonataFormatterBundle/blob/4.x/src/Controller/CkeditorAdminController.php#L93) 中看到控制器不检查表单是否有效,也不检查媒体是否有效。

另一方面,如果上传发生错误,ckeditor 只会显示服务器返回的错误页面,但不会再次显示输入文件小部件。

【问题讨论】:

    标签: sonata


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 1970-01-01
      • 2017-11-17
      • 2014-06-04
      • 1970-01-01
      • 2020-05-19
      • 2017-11-22
      • 2018-07-05
      • 2018-10-30
      相关资源
      最近更新 更多