尝试使用Ajax从远程服务器下载文件,而Codeigniter无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试使用Ajax从远程服务器下载文件,而Codeigniter无法正常工作相关的知识,希望对你有一定的参考价值。
我在点击链接时尝试下载pdf。
我调用了一个链接的函数onclick,在Codeigniter中我编写了一个下载PDF文件的函数但是在运行URL时,文件被下载但是当点击链接触发时,它无法正常工作。
控制器:
function downloadpdf($pid)
{ set_time_limit(0);
$url="http://www.malayatourism.com/uploads/images/packages/pdf/$pid.pdf";
$file = basename($url);
$fp = fopen($file, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
echo "success";
}
我的代码ajax:
function DownLoadPdf(id)
{
url = "<?php echo base_url();?>admin/packages/downloadpdf/"+id;
$.ajax({
type:'POST',
url: url,
data : { pid : id},
success : function(response) {
console.log(response);
},
error : function(response) {
console.log("error");
}
});
}
视图:
echo '<a href="javascript:void()" title="Hapus" onclick="DownLoadPdf(' . "'" . $cdata[0]->package_id . "'" . ')"> Download Attachment</a>';
答案
就ajax而言,你不能通过ajax做到这一点,因为ajax不是为了这个目的而做的,它是一个异步调用,它会给你一个结果。但是你可以在不使用任何jquery,ajax的情况下完成这项工作
<a href="http://www.malayatourism.com/uploads/images/packages/pdf/$pid.pdf" download> Download Attachment</a>
其中$ pid是您要下载文件的ID。 download属性将强制下载文件。干杯
另一答案
您不能也不需要通过Ajax执行此操作。只是用
function DownLoadPdf(id)
{
url = "<?php echo base_url();?>admin/packages/downloadpdf/"+id;
window.location.href = url;
}
或者在视图上
echo '<a href="'.base_url().'admin/packages/downloadpdf/'.$cdata[0]->package_id. '" title="Hapus" target="_blank" > Download Attachment</a>';
以上是关于尝试使用Ajax从远程服务器下载文件,而Codeigniter无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
为啥从远程 AWS S3 服务器下载 json 文件时 axios GET 错误