18

Used the below method in order to get the media directory path, but it returns an error.

$om = \Magento\Core\Model\ObjectManager::getInstance();

$directoryList = $om->get(\Magento\App\Filesystem\DirectoryList::class);

$pubMediaDir = $directoryList->getPath(\Magento\App\Filesystem\DirectoryList::MEDIA);

Please help me to find a solution.

2

5 Answers 5

44

Instead of using direct object manager, use It like

use Magento\Framework\App\Filesystem\DirectoryList;

protected $_filesystem;

public function __construct(
    \Magento\Framework\Filesystem $filesystem
)
{
    $this->_filesystem = $filesystem;
}

Now you can media path by,

$mediapath = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath();

EDIT

If you want to use an Object Manager, then you can use this (not recommended)

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$fileSystem = $objectManager->create('\Magento\Framework\Filesystem');
$mediaPath = $fileSystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath();
echo $mediaPath;
exit;
7
  • it returns an error like this " Uncaught TypeError: Argument 2 passed to namespace\Module\Controller\Index\Upload::__construct() must be an instance of Magento\Framework\Filesystem, none given,"
    – Rita Jose
    May 29, 2017 at 12:40
  • yes, try to di:compile and try again :)
    – Keyur Shah
    May 29, 2017 at 12:41
  • di:compile done, but it again returns a errror :( "Recoverable Error: Object of class Magento\Framework\Filesystem\Directory\Read could not be converted to string in /opt/lampp/htdocs/magento214/app/code/namespace/Customtab/Controller/Index/Upload.php on line 18"
    – Rita Jose
    May 29, 2017 at 12:46
  • 1
    see my edit, If you want to use direct object manager @RitaJose
    – Keyur Shah
    May 29, 2017 at 12:47
  • @KeyurShah, Would you please suggest how to get Custom module's image folder directory path? I want to get directory path of my module's image folder.
    – John
    Jun 23, 2017 at 5:01
9

First you will need to inject DirectoryList class into your Magento 2 constructor:

public function __construct(\Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\App\Filesystem\DirectoryList $directory_list, array $data = []) {
     parent::__construct($context, $data);
     $this->directory_list = $directory_list;  
 }

After that you will have access to DirectoryList methods for retrieving various paths. For example, to get media folder you can use:

$this->directory_list->getPath('media');

Other possible uses are:

/* Get app folder */
$this->directory_list->getPath('app');

/* Get configuration folder */
$this->directory_list->getPath('etc');

/* Get libraries or third-party components folder */
$this->directory_list->getPath('lib_internal');

/* Get libraries/components that need to be accessible publicly through web-server folder */
$this->directory_list->getPath('lib_web');

/* Get public folder */
$this->directory_list->getPath('pub');

/* Get static folder */
$this->directory_list->getPath('static');

/* Get var folder */
$this->directory_list->getPath('var');

/* Get temporary files folder */
$this->directory_list->getPath('tmp');

/* Get file system caching directory (if file system caching is used) */
$this->directory_list->getPath('cache');

/* Get logs of system messages and errors */
$this->directory_list->getPath('log');

/* Get file system session directory (if file system session storage is used) */
$this->directory_list->getPath('session');

/* Get directory for Setup application*/
$this->directory_list->getPath('setup');

/* Get Dependency injection related file directory */
$this->directory_list->getPath('di');

/* Relative directory key for generated code*/
$this->directory_list->getPath('generation');

/* Temporary directory for uploading files by end-user */
$this->directory_list->getPath('upload');

/* Directory to store composer related files (config, cache etc.) in case if composer runs by Magento Application */
$this->directory_list->getPath('composer_home');

/* A suffix for temporary materialization directory where pre-processed files will be written (if necessary) */
$this->directory_list->getPath('view_preprocessed');

/* Get template minification dir */
$this->directory_list->getPath('html');
4
  • it returns browser url of media...i need the folder path of media
    – Rita Jose
    May 29, 2017 at 12:41
  • Please see my updated answer. May 29, 2017 at 12:54
  • till not working. Jun 21, 2018 at 10:24
  • Thank you @MohitKumarArora -- saved my day. the above solution worked like charm
    – Abid Malik
    Mar 7, 2019 at 11:37
7

Try to get it by using StoreManagerInterface

use Magento\Store\Model\StoreManagerInterface;
protected $storeManager;

public function __construct(
    StoreManagerInterface $storeManager,
)
{
    $this->storeManager = $storeManager;
}

Now get media url using

 $mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
1
6

Use below code to get the media path on .phtml file.

$this->getUrl('pub/media');

By Objectmanager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
echo $objectManager->get('Magento\Store\Model\StoreManagerInterface')
                    ->getStore()
                    ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
1
  • 3
    It returns the browser url path.. I need the folder path of media
    – Rita Jose
    May 29, 2017 at 12:37
0

To get media path use below code

$this->fileSystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath("folder_name")

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.