4

I want to change the MAX_IMAGE_WIDTH and MAX_IMAGE_HEIGHT constants of image uploader in Admin.

I think we should override vendor/magento/framework/File/Uploader.php. Can anyone give me a suggestion?

  • You want to change in Admin right? If you want to change these values in Admin, I'm pretty sure my answer can work. – Khoa TruongDinh Jan 10 '17 at 12:06
4

We should not override the constant variables of class.

If having already a custom admin theme, you can override these templates in your custom admin theme.

I saw some templates which use these constant variables:

vendor/magento/module-backend/view/adminhtml/templates/media/uploader.phtml

vendor/magento/module-cms/view/adminhtml/templates/browser/content/uploader.phtml

enter image description here

Read more here: http://devdocs.magento.com/guides/v2.1/frontend-dev-guide/themes/admin_theme_create.html

2

I needed this only for product images and I didn't want to create a custom admin theme. So I used the event catalog_product_gallery_prepare_layout.

adminhtml/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="catalog_product_gallery_prepare_layout">
    <observer name="vendor_module_catalog_product_gallery_prepare_layout" instance="Vendor\Module\Observer\CatalogProductGalleryPrepareLayout" />
</event>

Observer/CatalogProductGalleryPrepareLayout.php

<?php

namespace Vendor\Module\Observer;

use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

class CatalogProductGalleryPrepareLayout implements ObserverInterface
{

    public function execute(Observer $observer)
    {
         $block = $observer->getBlock();
         if (!$block) return;

         $uploaderBlock = $block->getChildBlock('uploader');
         if (!$uploaderBlock) return;

         $uploaderBlock->setTemplate('Vendor_Module::media/uploader.phtml');
     }
 }

and of course you should override the template:

view/adminhtml/templates/media/uploader.phtml

  • Thanks @marcus. It's working fine in magento 2.2.6 version – Pradeep Thakur Aug 1 at 8:44
1

You have to just create one module inside app/code folder.

Inside etc/di.xml file,

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Framework\File\Uploader" type="Vendor\Module\File\Uploader" />
</config>

Now just create one folder under Module, File and create Uploader.php file.

app/code/Vendor/Module/File Uploader.php file,

<?php

namespace Vendor\Module\File;

use Magento\Framework\Filesystem\DriverInterface;


class Uploader extends \Magento\Framework\File\Uploader
{
    /**
     * Uploaded file handle (copy of $_FILES[] element)
     *
     * @var array
     * @access protected
     */
    protected $_file;

    /**
     * Uploaded file mime type
     *
     * @var string
     * @access protected
     */
    protected $_fileMimeType;

    /**
     * Upload type. Used to right handle $_FILES array.
     *
     * @var \Magento\Framework\File\Uploader::SINGLE_STYLE|\Magento\Framework\File\Uploader::MULTIPLE_STYLE
     * @access protected
     */
    protected $_uploadType;

    /**
     * The name of uploaded file. By default it is original file name, but when
     * we will change file name, this variable will be changed too.
     *
     * @var string
     * @access protected
     */
    protected $_uploadedFileName;

    /**
     * The name of destination directory
     *
     * @var string
     * @access protected
     */
    protected $_uploadedFileDir;

    /**
     * If this variable is set to TRUE, our library will be able to automatically create
     * non-existent directories.
     *
     * @var bool
     * @access protected
     */
    protected $_allowCreateFolders = true;

    /**
     * If this variable is set to TRUE, uploaded file name will be changed if some file with the same
     * name already exists in the destination directory (if enabled).
     *
     * @var bool
     * @access protected
     */
    protected $_allowRenameFiles = false;

    /**
     * If this variable is set to TRUE, files dispertion will be supported.
     *
     * @var bool
     * @access protected
     */
    protected $_enableFilesDispersion = false;

    /**
     * This variable is used both with $_enableFilesDispersion == true
     * It helps to avoid problems after migrating from case-insensitive file system to case-insensitive
     * (e.g. NTFS->ext or ext->NTFS)
     *
     * @var bool
     * @access protected
     */
    protected $_caseInsensitiveFilenames = true;

    /**
     * @var string
     * @access protected
     */
    protected $_dispretionPath = null;

    /**
     * @var bool
     */
    protected $_fileExists = false;

    /**
     * @var null|string[]
     */
    protected $_allowedExtensions = null;

    /**
     * Validate callbacks storage
     *
     * @var array
     * @access protected
     */
    protected $_validateCallbacks = [];

    /**#@+
     * File upload type (multiple or single)
     */
    const SINGLE_STYLE = 0;

    const MULTIPLE_STYLE = 1;

    /**#@-*/

    /**
     * Temp file name empty code
     */
    const TMP_NAME_EMPTY = 666;

    /**
     * Max Image Width resolution in pixels. For image resizing on client side
     */
    const MAX_IMAGE_WIDTH = 1920;

    /**
     * Max Image Height resolution in pixels. For image resizing on client side
     */
    const MAX_IMAGE_HEIGHT = 1200;


}
  • i tried it, but it is not working – omelandr Jan 10 '17 at 11:24
  • @Rakesh, you shouldn't override the constant variables of class. – Khoa TruongDinh Jan 10 '17 at 13:47
0

As from Magento 2.3.3 you no-longer need to change this setting by overriding files as it is configurable within the admin area:

Stores > Configuration > Advanced > System > Images Upload Configuration

enter image description here

Commit: https://github.com/magento/magento2/commit/88e26f2b958d6835f877d0feea8759418326a7f5

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.