21

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
  • 1
    Your question is not clear to me. You can explain more details? Additionally, we can take a look: magento.stackexchange.com/a/155238/33057 Commented May 29, 2017 at 12:32
  • @Rita Jose, does the accepted answer fit in a .phtml file which doesn't have any class? Commented Apr 27, 2020 at 18:35

5 Answers 5

49

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," Commented May 29, 2017 at 12:40
  • yes, try to di:compile and try again :) Commented 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" Commented May 29, 2017 at 12:46
  • 1
    see my edit, If you want to use direct object manager @RitaJose Commented 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. Commented Jun 23, 2017 at 5:01
10

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 Commented May 29, 2017 at 12:41
  • Please see my updated answer. Commented May 29, 2017 at 12:54
  • till not working. Commented Jun 21, 2018 at 10:24
  • Thank you @MohitKumarArora -- saved my day. the above solution worked like charm Commented 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
  • not working..... Commented Jun 21, 2018 at 10:50
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 Commented 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") 

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.