尝试使用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 错误

使用 Ajax 从 Servlet 下载文件

使用Ajax下载DOCX文档

如何使用 jQuery Ajax 调用从 ASP.NET Web Api 下载 CSV 文件

从扩展中使用 AJAX 访问远程域

从远程服务器目录列表下载文件并导入 HDFS