使用jQuery创建下载按钮

时间:2014-08-19 07:45:54

标签: php jquery joomla download

我目前使用PHP制作了一个下载按钮但是当你将鼠标放在链接上时,你可以看到要下载的文件的路径,这是不安全的,因为你可以改变路径并下载某些人文件。

我想隐藏这条路径,我相信做这个按钮的最好方法是使用jQuery(如果我错了,请纠正我)。

这就是我所做的:

<?php 
        $nombredir = str_pad($this->item->id, 10, "0", STR_PAD_LEFT); 
        $path = 'media'.DS.'com_cspartners'.DS.'documentation';
        $path = str_replace('/administrator','',$path);
        $nombrePDF = "/".$nombredir.'_'.JText::_('COM_CSPARTNERS_NOMBRE_DOCUMENTATION_CONTRACT');
        $facturaFile=$path.DS.$nombredir;
        $pdfAdjunto = $facturaFile.$nombrePDF; //This is path and file name which appears in the link.
?>

这是我的下载按钮/链接:

<a href="<?php echo $pdfAdjunto; ?>" class="btn btn-primary" id="jform_download_documentation" name="jform[download_documentation]"><?php echo JText::_("COM_CSPARTNERS_DOWNLOAD_DOCUMENTATION_BUTTON"); ?></a>

2 个答案:

答案 0 :(得分:1)

尝试此操作:将点击事件绑定到锚标记并将href链接更改为href="#"

主播 -

<a href="#" class="btn btn-primary" 
   id="jform_download_documentation" 
   name="jform[download_documentation]">
  <?php echo JText::_("COM_CSPARTNERS_DOWNLOAD_DOCUMENTATION_BUTTON"); ?>
</a>

并创建一个值为link

的隐藏输入
<input type="hidden" 
       id="jform_download_documentation_hidden" 
       value="<?php echo $pdfAdjunto; ?>">

jQuery:点击按钮事件提交网址

$(function(){
  $('#jform_download_documentation').click(function(e){
        e.preventDefault();
        window.location.href = $('#jform_download_documentation_hidden').val();
  });
});

答案 1 :(得分:0)

也许您应该使用另一个PHP脚本,例如

<?php

 // generate file path using database or find file using PHP
 $path = '/some/path/';

 // get file name from dabatase, or set it as a const or param
 $filename= $_GET['filename']; // parase it for security

 // combine path and filename
$filename = $path.$filename;

 header("Content-disposition: attachment;filename=$filename");
 readfile($filename);
?>

将其保存为'download.php',然后当您创建下载按钮时,只传递一个参数。 下载链接看起来应该是这样的:download.php?id = 2323(数据库中的id:2323 - &gt;'some_document.doc')

下载/ some-2323-file - 然后parase param,获取ID和voila :)没有人看到文件路径:)