我正在尝试为文件设置下载计数器。我的计划是:当用户单击下载按钮时,该文件的 id 将发送到下载控制器,下载控制器使用其唯一 id 将下载列更新为 1,然后将用户重定向回视图,并开始下载。我找到了一种在单击下载按钮时将特定文件的 id 发送到下载控制器的方法。我使用了一个在视图中带有隐藏字段的表单来发送 id。 我在网上查了一下,我看到很多下载计数器,但大多数更新文本文件。我希望更新数据库中的列,而不是文本文件。这是我的下载表单视图:
<form id="form" action="<?php echo base_url();?>Download" method="post">
<input type="hidden" placeholder="ID" name="id" value ="<?php echo $res->id; ?>" class="wow fadeInUp">
<input type="hidden" placeholder="ID" name="url" value ="<?php echo $res->url; ?> class="wow fadeInUp">
<input type="submit" value="DOWNLOAD" id="download" class="wow fadeInUp">
</form>
此视图将 id 和其他数据发送到下载控制器,这是我的下载控制器:
function index()
{
$id = $this->input->post("id");
$url = $this->input->post("url");
$this->home_model->update_downloads_column($id);
redirect("Music/".$url);
}
我需要一条前进的道路。现在,数据库上的下载列已更新,我现在如何开始下载该文件?
为什么不使用 ajax 在 html 中传递具有下载属性的值和锚标记?
在这里检查:
http://www.w3schools.com/tags/att_a_download.asp
法典:
<a href="/pathtofile/file.txt" id="download" download>
然后只需执行以下操作:
<script>
$(document).ready(function(){
$("#download").on( "click",function () {
var id = $('input[name=id]').val();
var url = $('input[name=url]').val();
$.ajax({
type: "POST",
url: <?php echo base_url();?>+"Download",
data: {id: id, url: url},
success: function(){
//if success do something
}
});
});
})
</script>
因此,当您单击锚点时,下载将开始,ajax 会将 id 和 url 传递给控制器。