Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to download the files in magento

I uploaded some files for each customer in magento....

Then i listed the customers details with the uploaded file name ..

I need to download the file using magento code

This is the code:

public function downloadAction() {
        $entityid = $this->getRequest()->getParam('entity_id');
        $customer_data = Mage::getModel('customer/customer')->load($entityid);
        $filename = '';
        if($customer_data){
            $filename = $customer_data->getFileuploadname();
        }
        $filepath = '../uploads/'.$filename;

        if (! is_file ( $filepath ) || ! is_readable ( $filepath )) {
            throw new Exception ( );
        }
        $this->getResponse ()
                    ->setHttpResponseCode ( 200 )
                    ->setHeader ( 'Pragma', 'public', true )
                    ->setHeader ( 'Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true )
                    ->setHeader ( 'Content-type', 'application/force-download' )
                    ->setHeader ( 'Content-Length', filesize($filepath) )
                    ->setHeader ('Content-Disposition', 'inline' . '; filename=' . basename($filepath) );
        $this->getResponse ()->clearBody ();
        $this->getResponse ()->sendHeaders ();
        readfile ( $filepath );
        //exit(0);
    }

But it didsplays errors something like:

Trace:
#0 D:\wamp\www\mysite\app\code\core\Mage\Core\Controller\Varien\Action.php(419): Managecustomers_Users_IndexController->downloadAction()
#1 D:\wamp\www\mysite\app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('download')
#2 D:\wamp\www\mysite\app\code\core\Mage\Core\Controller\Varien\Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#3 D:\wamp\www\mysite\app\code\core\Mage\Core\Model\App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#4 D:\wamp\www\mysite\app\Mage.php(683): Mage_Core_Model_App->run(Array)
#5 D:\wamp\www\mysite\index.php(87): Mage::run('', 'store')
#6 {main}

The uploads folder is in magento root folder...

How can i download the file....

The $filename have the filename uploaded that is coming from database...

EDIT :

When i removed the code:

 if (! is_file ( $filepath ) || ! is_readable ( $filepath )) {
            throw new Exception ( );
        }

Then changed the filepath as :

$filepath = 'http://localhost/mysite/uploads/'.$filename;

Then downloading done perfectly....

like image 646
Kichu Avatar asked Mar 12 '13 04:03

Kichu


People also ask

How do I download Magento 2 files?

Below code is performed download any type of file in Magento 2. $content['rm'] = 1; // if you add 1 then it will be delete from server after being download, otherwise add 0. In the above code, we add one file to our Magento 2 file system at path <magetno root>/pub/media/catalog/attachments/file/test. pdf.

How do I access Magento files?

Accessing Files in MagentoGo to the Content section of Magento and click “Pages.” From this screen, you can access some of the more important pages of your website. These will include the home page, the 404 error page and other pertinent content you create for your visitors.

How do I add a downloadable PDF to Magento?

From the Backend, you select Product > Catalog > Product Attachments > Manage Files. Click on the Add New button on the upper right of the screen to upload a PDF file.


2 Answers

What about use Magento code ? ... _prepareDownloadResponse()

 public function downloadAction()
    {
       $filename = '';
       if($customer_data){
          $filename = $customer_data->getFileuploadname();
       }
       $filepath = Mage::getBaseDir('base').'/uploads/'.$filename;

        if ($filename) {
            try {
                $this->_prepareDownloadResponse($filename, array('type' => 'filename', 'value' => $filepath));

            } catch (Exception $e) {
                $this->_getSession()->addError($e->getMessage());
            }
        } else {
            $this->_getSession()->addError($filepath . ' not found');
            $this->_redirect('adminhtml/cache');
            return;
        }
    }
like image 198
WonderLand Avatar answered Oct 05 '22 03:10

WonderLand


This is the solution for this type of problems:

 public function downloadAction() {
        $entityid = $this->getRequest()->getParam('entity_id');
        $customer_data = Mage::getModel('customer/customer')->load($entityid);
        $filename = '';
        if($customer_data){
            $filename = $customer_data->getFileuploadname();
        }
        $filepath = Mage::getBaseDir('base').'/uploads/'.$filename;

        if (! is_file ( $filepath ) || ! is_readable ( $filepath )) {
            throw new Exception ( );
        }
        $this->getResponse ()
                    ->setHttpResponseCode ( 200 )
                    ->setHeader ( 'Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true )
                     ->setHeader ( 'Pragma', 'public', true )
                    ->setHeader ( 'Content-type', 'application/force-download' )
                    ->setHeader ( 'Content-Length', filesize($filepath) )
                    ->setHeader ('Content-Disposition', 'attachment' . '; filename=' . basename($filepath) );
        $this->getResponse ()->clearBody ();
        $this->getResponse ()->sendHeaders ();
        readfile ( $filepath );
        exit;
    }

The problem based on the file path issues.....now its solved....

like image 21
Kichu Avatar answered Oct 05 '22 03:10

Kichu