Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Datei Download in Jooma  (Gelesen 1337 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

shral

  • Unter Beobachtung
  • Beiträge: 6
Datei Download in Jooma
« am: 07. Juni 2012, 04:39:10 »
Hallo,
ich programmiere gerade eine Komponente für Frontend und wollte ein Download berreich realisieren, mein Kode sieht folgendermasen aus:
Der User schickt eine Form mit folgende Url zu:
index.php?option=com_komponente&controller=download&task=download&format=rawIn Models wird folgender Kode aufgerufen:
chdir($_REQUEST["path"]);
header('Content-disposition:attachment;filename=test.txt');
header('Content-type:application/txt');
readfile('test.txt');
Die Datei wird zum download angeboten, nur bei Firefox und Opera wird als Firefox/Opera-html dokument erkannt. Mache ich was falsch oder muss man sowas in Joomla andas realisieren?
Ich bedanke mich im Voraus.
LG

shral

  • Unter Beobachtung
  • Beiträge: 6
Antw: Datei Download in Jooma
« Antwort #1 am: 08. Juni 2012, 06:02:28 »
Hallo,
ich habe das Problem endlich gelöst und zwar mit folgendem Code:
chdir($_REQUEST["path"]);
header('Content-disposition:attachment;filename=test.txt');
header('Content-type:application/txt');
ob_clean();
readfile('test.txt');
exit;
Entscheidend war "exit;" am Ende.
LG

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Datei Download in Jooma
« Antwort #2 am: 08. Juni 2012, 06:53:52 »
Hallo,

zusätzlich ist evtl. für dich noch interessant:

        JFactory::getDocument()->setMimeEncoding('application/txt');
        JFactory::getDocument()->setCharset();
        JResponse::setBody($content);
        JResponse::allowCache(false);

        echo JResponse::toString();

Du brauchst kein exit, wenn du format=raw nutzt. JDocument hat recht viel von dem header-Zeugs intern gelöst, da kannst du evtl. mal reinschauen.

chdir($_REQUEST["path"]); ist nicht wirklich schön und bietet recht viel Potenzial für nen Hack.

Besser ist es in etwa so zu lösen:

ob_start();

$filename = JFile::makeSafe($filename);
$path = JPath::check($path);
$path = JFolder::makeSafe($path);

$file = JPath::clean($path.$filename);

echo JFile::read($file);
$content = ob_get_contents();
ob_end();

JResponse::setBody($content);

Das ganze gehört natürlich in view.raw.php oder noch besser in eine Templatedatei von dem View für potenzielle Overrides.
« Letzte Änderung: 08. Juni 2012, 07:01:09 von bembelimen »
Joomla! ist auch nur ein Mensch...