如何避免在下载或打开我的文件时附加.html扩展名

时间:2013-05-03 08:26:47

标签: cakephp

当我在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;
}

4 个答案:

答案 0 :(得分:3)

处理CakePHP 2.x中的文件下载

虽然其他解决方案可行,但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');
?>

请根据需要制作参数..

请告诉我是否可以为您提供更多帮助。