Joomla组件+强制下载

时间:2011-08-16 12:27:08

标签: php joomla

我编写了一个组件(图库)。我想整合所有项目的forcedownload。 但是不起作用:(,只是得到了损坏的文件。我试图使用完全相同的代码并在joomla之外运行它并且它的工作正常。我创建了一个完全空的模板 但它没有帮助。

我的(com_component / views / forcedownload / tmpl / default.php)

<?php 
if(!isset($_GET["id"]) || empty($this->item)) {
    echo "Invalid request";
    die();
}

$path       = "images/randomtest/catid".$this->item->cat_id."/";
$filename   = $path.$this->item->filename;
$file = $this->item->filename;

if(!file_exists($filename)) {
    echo "Error: File not found";
    die();
}

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: Content-type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile($filename);
?>

1 个答案:

答案 0 :(得分:0)

首先是:您使用的是$_GET['format'] = raw吗?如果不在您的控制器中

if(!isset($_GET["format"]) || $_GET["format"]!='raw') {
    $this->setRedirect( JURI::current(). '?format=raw' );
    return false;
}

同样在你的标题中,你被声明的内容类型为:application / octet-stream,你确定要这个吗?

也在这里:

$path       = "images/randomtest/catid".$this->item->cat_id."/";

您需要,整个系统路径不仅是本地路径,请尝试使用:

$path       = JPATH_SITE."/images/randomtest/catid".$this->item->cat_id."/";