2017-12-07 3 views
1

Ich versuche eine PDF-Datei herunterzuladen, aber wenn ich auf den Download-Button klicke, wird die Datei ohne Erweiterung heruntergeladen. Das ist, es gibt keine PDF-Erweiterung mit der Datei, wenn ich es herunterlade!Datei wird ohne Erweiterung heruntergeladen?

Aktion:

public function executeDownload(sfWebRequest $request) { 
     $this->ebook_id = $request->getParameter('ebook', $this->default_ebook); 
     $this->ebook = $this->ebooks[$this->ebook_id]; 

     if (!is_array($this->ebook)) 
      return; 

     // Allow user to download the ebook (and make sure there is no other output) 
     $this->setLayout(false); 
     sfConfig::set('sf_web_debug', false); 
     $content = sfConfig::get('sf_root_dir').'/web'.$this->ebook['ebook']; 
     //echo "<p>PDF: $content</p>"; var_export(filesize($content));exit; 
     // Check if the file exists 
     $this->forward404Unless(file_exists($content)); 

     // Record the download for this eBook 
     $c = new Criteria(); 
     $c->add(EbookDownloadsPeer::EBOOK_SLUG, $this->ebook_id); 
     $ebook = EbookDownloadsPeer::doSelectOne($c); 

     $ebook->setLastDownloaded(time()); 
     $ebook->setEbookDownloads($ebook->getEbookDownloads()+1); 
     $ebook->save(); 

     // Adding the file to the Response object 
     $content_type = (in_array($this->ebook_id, array('readyourbody', 'whyamifatigued', 'nutrientsfromfood'))) ? 'application/pdf': 'image/jpeg'; 

     $this->getResponse()->clearHttpHeaders(); 
     $this->getResponse()->setHttpHeader('Pragma: public', true); 
     $this->getResponse()->setContentType($content_type); 
     $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="'.$this->ebook['name'].'"'); 
     $this->getResponse()->setHttpHeader('Content-Length', filesize($content)); 
     $this->getResponse()->sendHttpHeaders(); 
     $this->getResponse()->setContent(readfile($content)); 

     return sfView::NONE; 
    } 

Vorlage:

<div class="cyan3 txt-large txt-c"> 
     <?php echo link_to('Click here','ebooks/download?ebook='.$ebook_id,'') ?> to <?php echo link_to('download it now','ebooks/download?ebook='.$ebook_id,'') ?>! 
     </div><br /> 
    </div> 
+0

Does '$ this-> ebook [ 'name']' den Dateinamen mit der Erweiterung enthalten? Vielleicht ist die Erweiterung in einem anderen Feld im Ebook-Array –

+0

Nein, es ist nur @MarkC Name. –

+1

Geben Sie es .pdf zu E-Book-Namen, es sollte funktionieren – rahulsm

Antwort

0

Bitte fügen Sie .pdf als Erweiterung zu Ihrem E-Book-Namen.
Es wird funktionieren.

+0

Danke für die Anleitung! –

1

Überprüfen Sie den Inhalt des Arrays $this->ebook und suchen Sie nach einem Feld, das die Dateierweiterung enthält. Fügen Sie diesen Wert auf der Linie

$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="'.$this->ebook['name'] . '"');

so es denn so etwas wie

$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="'.$this->ebook['name'] . $this->ebook['extension'].'"');

+0

Danke für die Anleitung! –

Verwandte Themen