14

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.

21

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;
  • 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 '17 at 12:40
  • yes, try to di:compile and try again :) – Keyur Shah May 29 '17 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 '17 at 12:46
  • see my edit, If you want to use direct object manager @RitaJose – Keyur Shah May 29 '17 at 12:47
  • wow :D ..Thanks a lot.. The edited one works fine :) – Rita Jose May 29 '17 at 12:51
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);
  • 2
    It returns the browser url path.. I need the folder path of media – Rita Jose May 29 '17 at 12:37
6

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');
  • it returns browser url of media...i need the folder path of media – Rita Jose May 29 '17 at 12:41
  • Please see my updated answer. – Mohit Kumar Arora May 29 '17 at 12:54
  • till not working. – Sarfaraj Sipai Jun 21 '18 at 10:24
  • Thank you @MohitKumarArora -- saved my day. the above solution worked like charm – Abid Malik Mar 7 at 11:37
6

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);

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.