我尝试在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的文档非常有限。
答案 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);
}