当我在img / upload文件夹中保存文件时,文件会以正确的文件扩展名保存。
但是,当我尝试下载文件时,会附加一个.htm文件扩展名。
我该如何避免这种情况?我在下面添加了我的代码;
view.ctp
<?php echo $this->Form->label("Resume:");?>
<?php echo $this->Form->input("resume",array("class"=>"input_boxstyle_select","label"=>"","type"=>"file","id"=>"file"));?>
<a href="../download_resume/<?php echo $editEmpPros[0]['prospective_employee']['resume']?>" style="margin-left:140px;color:#0477CA;"> <?php echo $editEmpPros[0]['prospective_employee']['resume']?> </a>
在我的控制器内:
public function download_resume($id=null)
{
$LUser = $this->Session->read('username');
$this->disableCache();
if (!$LUser) {
$this->redirect(array("action"=>"../"));
}
$path="../webroot/img/upload/$id";
header('Content-Disposition: attachment'); readfile($path);
//print_r(readfile($path));
exit;
}
答案 0 :(得分:3)
虽然其他解决方案可行,但CakePHP通过CakeResponse
object处理响应。本手册中的这一章介绍了如何发送(下载)文件; Sending Files
响应将根据文件扩展名
自动尝试设置正确的mime类型$this->response->file(WEBROOT_DIR . '/img/upload/' . $filename);
//Return reponse object to prevent controller from trying to render a view
return $this->response;
要强制下载文件并指定自定义文件名(如果需要),请使用此代码。 CakeResponse对象将自动设置正确的标题,因此手动指定自定义文件名不是必要的
// To force *downloading* the file and specify a custom filename (if desired)
$this->response->file(
WEBROOT_DIR . '/img/upload/' . $filename,
array(
'download' => true,
'name' => 'custom-filename-for-downloading'
)
);
return $this->response;
答案 1 :(得分:2)
您也可以在Content-Disposition标题中提供文件名,如下所示:
Content-Disposition: attachment; filename="foo.bar"
答案 2 :(得分:1)
根据您必须支持的浏览器,您还可以使用HTML5的download
属性:
<a href="/path-to-your-file" download="your-desired-filename">my link</a>
答案 3 :(得分:0)
你必须在这里设置一些参数我给你一个下载PDF文件的例子
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
请根据需要制作参数..
请告诉我是否可以为您提供更多帮助。