我编写了一个组件(图库)。我想整合所有项目的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);
?>
答案 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."/";