I need to export the custom grid to the csv file. I have used the below code in my listing.xml file.

<exportButton class="Magento\Ui\Component\ExportButton">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="options" xsi:type="array">
                    <item name="cvs" xsi:type="array">
                        <item name="value" xsi:type="string">csv</item>
                        <item name="label" xsi:type="string" translate="true">CSV</item>
                        <item name="url" xsi:type="string">catalogreport/export/gridToCsv</item>
                    <item name="xml" xsi:type="array">
                        <item name="value" xsi:type="string">xml</item>
                        <item name="label" xsi:type="string" translate="true">Excel XML</item>
                        <item name="url" xsi:type="string">catalogreport/export/gridToXml</item>

Then in my


class GridToCsv extends Action

    public function execute()
      $fileName = "CustomSales_". date('Ymd_His').".csv";
      $dataSource = //The data fetches here;
      $handle = fopen($fileName, 'w');
      // Adding my logic to write the content to the file


    public function downloadCsv($fileName)
        if (file_exists($fileName)) {
             //set appropriate headers
             header('Content-Description: File Transfer');
             header('Content-Type: application/csv');
             header('Content-Disposition: attachment; filename='.basename($fileName));
             header('Expires: 0');
             header('Cache-Control: must-revalidate');
             header('Pragma: public');
             header('Content-Length: ' . filesize($fileName));

This is working fine, The file is downloading successfully, But here my question is the CSV file is storing into the root directory, I need to change to pub/media/import directory.

How this can be done here? I want to store the csv file inside pub/media/import directory.

Can anyone suggest me please. Thanks!!

1 Answer 1


Try changing Content-Disposition in function downloadCsv($fileName)to

header('Content-Disposition: attachment; filename='.$directory.'/'.$fileName);

Where $directory will be the media folder path which you can get dynamically by adding dependency in constructor using below code

use Magento\Framework\App\Filesystem\DirectoryList;

protected $_filesystem;

public function __construct(
    \Magento\Framework\Filesystem $filesystem
    $this->_filesystem = $filesystem;
$mediapath = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath();
$directory = mediapath.'import'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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