2013-03-12 7 views
5

ich für jeden Kunden einige Dateien in magento hochgeladen zum Download ....Wie die Dateien in magento

Dann aufgelistet ich die Kunden Details mit dem hochgeladenen Dateinamen ..

Ich brauche die Datei herunterzuladen Dieser magento Code

ist der 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); 
    } 

Aber es didsplays Fehler so etwas wie:

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} 

Der uploads Ordner ist in magento Stammordner ...

Wie ich die Datei herunterladen können ....

Die $filename hochgeladen der Dateiname, dass sich aus der Datenbank kommen ...

EDIT:

Wenn ich den Code entfernt:

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

verändert dann die Filepath wie:

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

Dann perfekt gemacht downloading ....

+0

ok habe es jetzt .... – Kichu

Antwort

10

Dies ist die Lösung für diese Art von Problemen:

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

Das Problem basiert auf dem Dateipfad Probleme ..... jetzt ist es gelöst ....

+0

Es wird bevorzugt '_prepareDownloadResponse zu verwenden()' wie @WonderLand vorgeschlagen, da es nicht 'braucht exit' – naitsirch

+0

Ich versuche, das gleiche zu implementieren Lösung, aber es gibt mir Fehler als 'Call to a Member-Funktion SetHttpResponseCode() auf einem Nicht-Objekt' können Sie mir bitte wissen, gibt es eine andere Klasse, die in Datei enthalten sein muss? Danke. –

+0

Auch versucht, _prepareDownloadResponse zu verwenden, aber nicht funktioniert. –

10

Was ist mit Ihnen? se 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; 
     } 
    } 
+5

Dies sollte definitiv die akzeptierte Antwort sein. Danke @WonderLand – naitsirch

Verwandte Themen