如何使用typo3/extbase触发下载? [英] How can I trigger a download with typo3/extbase?
本文介绍了如何使用typo3/extbase触发下载?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在将Typo3与extbase和液体一起使用.我有一个名为downloadAction()
的操作的控制器.调用该动作后,系统尝试呈现下载模板(但我只想开始下载).
I'm using Typo3 with extbase and fluid. I have a Controller with an action called downloadAction()
. After calling the action the system tries to render the download-template (but I just want to start a download).
public function downloadAction($id) {
// create file
// send header
// dump file
// exit
}
如何转储创建的download-File
并发送下载头,而不是正常的渲染过程?最好的方法是什么?
How can I dump the created download-File
and send a download header instead of the normal render process? What is the best way?
谢谢
推荐答案
几个月前,我在一个项目中做到了这一点,很简单.
I did this in a project some months ago, it's pretty straight forward.
/**
* @param string $fileName
* @return void
*/
public function downloadAction($fileName) {
$file = $this->settings['uploadFolder'] . 'uploadedPhotos/' . $fileName;
if(is_file($file)) {
$fileLen = filesize($file);
$ext = strtolower(substr(strrchr($fileName, '.'), 1));
switch($ext) {
case 'txt':
$cType = 'text/plain';
break;
case 'pdf':
$cType = 'application/pdf';
break;
case 'zip':
$cType = 'application/zip';
break;
case 'doc':
$cType = 'application/msword';
break;
case 'xls':
$cType = 'application/vnd.ms-excel';
break;
case 'ppt':
$cType = 'application/vnd.ms-powerpoint';
break;
case 'gif':
$cType = 'image/gif';
break;
case 'png':
$cType = 'image/png';
break;
case 'jpeg':
case 'jpg':
$cType = 'image/jpg';
break;
case 'mp3':
$cType = 'audio/mpeg';
break;
case 'wav':
$cType = 'audio/x-wav';
break;
case 'mpeg':
case 'mpg':
case 'mpe':
$cType = 'video/mpeg';
break;
case 'mov':
$cType = 'video/quicktime';
break;
case 'avi':
$cType = 'video/x-msvideo';
break;
//forbidden filetypes
case 'inc':
case 'conf':
case 'sql':
case 'cgi':
case 'htaccess':
case 'php':
case 'php3':
case 'php4':
case 'php5':
exit;
case 'exe':
default:
$cType = 'application/octet-stream';
break;
}
$headers = array(
'Pragma' => 'public',
'Expires' => 0,
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Content-Description' => 'File Transfer',
'Content-Type' => $cType,
'Content-Disposition' => 'attachment; filename="'. $fileName .'"',
'Content-Transfer-Encoding' => 'binary',
'Content-Length' => $fileLen
);
foreach($headers as $header => $data)
$this->response->setHeader($header, $data);
$this->response->sendHeaders();
@readfile($file);
}
exit;
}
这篇关于如何使用typo3/extbase触发下载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文