Codeigniter中的强制下载不起作用

时间:2017-01-18 10:14:31

标签: php ajax codeigniter

我尝试在codeigniter中使用force_download下载文件。

我像这样创建一个AJAX调用

$.ajax({
    type: 'POST'
    , url: '<?php echo base_url('downloadPayroll'); ?>'
    , data: { filename: filename }
});

这是我的控制器

public function downloadPayroll() {
    $filename = $this->input->post('filename');
    $fileContents = file_get_contents(base_url('assets/uploads/'. $filename));

    force_download($filePath, $fileContents);
}

我知道我有正确的路径和文件名,但它没有下载任何内容。

我做错了什么,因为Download Helper的文档非常有限。

4 个答案:

答案 0 :(得分:0)

请尝试使用以下代码。您为force_download

传递了错误的变量名称
$filename = $this->input->post('filename');
$fileContents = file_get_contents(base_url('assets/uploads/'. $filename)); 
$file='test.pdf';
force_download($file, $fileContents);

答案 1 :(得分:0)

只是给可能遇到此问题的其他人留言:确保您为force_download()的第一个参数提供的文件名有文件扩展名。

CodeIgniter使用它来设置MIME类型,它似乎没有。

了解更多CodeIgniter - force_download() problem

$name = 'myfile.txt';//file extension is required
force_download($name, NULL);//if you dont want to send data set NULL

并且不要忘记先加载download助手。

$this->load->helper('download');

答案 2 :(得分:0)

没有办法通过像这样的ajax请求下载文件 - 试试这个

你的JS文件

$.ajax({
    type: 'POST'
    , url: '<?php echo base_url('downloadPayroll'); ?>'
    , data: { filename: filename },

    success: function(strUrl)
    {
        var link = document.createElement('a');
        link.style = "display: none";
        link.href = strUrl;
        document.body.appendChild(link);
        link.click();
        setTimeout(function () {
            document.body.removeChild(link);
        }, 5000);   
    }
});

你的控制器:

public function downloadPayroll() 
{
    $filename = $this->input->post('filename');
    echo base_url('assets/uploads/'. $filename);
}

答案 3 :(得分:0)

你缺少帮手

public function downloadPayroll() {
$filename = $this->input->post('filename');
$fileContents = file_get_contents(base_url('assets/uploads/'. $filename));

$this->load->helper( 'download' );

force_download($filePath, $fileContents);

}