如何为从数据库获取的文件制作下载按钮?

时间:2019-04-01 17:02:44

标签: php html mysql

我需要打印出我保存在数据库中的所有文件,然后才能下载它们。我能够回应它们,但是我不知道如何进行下载“按钮”以将它们下载到计算机。 datbase有两列:ID和Ime。

我尝试使用HTML中的标记,但没有运气。我能够在文件名旁边回显按钮,但是我无法下载它们(我尝试使用file_put_contents方法)

这是输出文件名的代码(Ime =用我的语言命名)。

<?php
$conn = mysqli_connect('localhost','root','usbw','down');
$query = "SELECT * FROM datoteka";
$result = mysqli_query($conn,$query);
$result_check = mysqli_num_rows($result);
if($result_check > 0){
    while($row = mysqli_fetch_assoc($result)){
        echo $row["Ime"]."<br>";
    }
}
?>

输出看起来像这样:

datoteka2019-04-01-15-44.doc
datoteka2019-04-01-15-48.doc
datoteka2019-04-01-15-16.pdf

我希望能够下载的数据库文件(目前为3个,可能更多) database picture

网站上每个文件名旁边应有一个下载按钮(或类似的东西),使我可以从数据库中下载该文件(一次仅下载一个文件,而不是一次下载所有文件)。

2 个答案:

答案 0 :(得分:1)

我曾经做过类似的脚本,您要做的是设置一些标头并从数据库中回显数据。

例如,假设数据位于$row['filedata']中,则如下

<?php
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$row['Ime']);
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
echo $row['filedata'];
?>

现在您必须知道要先下载哪个文件,为此,我们可以使用GET或POST参数

<?php
$fileID = htmlentities($_GET['fileID']);
$conn = mysqli_connect('localhost','root','usbw','down');
$fileID = mysqli_real_escape_string($conn, $fileID); // ALWAYS ESCAPE USER INPUT
$query = "SELECT * FROM datoteka where `ID`=$fileID";
$result = mysqli_query($conn, $query);
$result_check = mysqli_num_rows($result);
if($result_check > 1 || $result_check < 1){ //If more then 1 result die
    die('inavlid ID');
}
$row = mysqli_fetch_assoc($result);
//and here the above mentioned lines
?>

向页面添加下载按钮的最简单方法是使用JavaScript中的window.open()函数,如下所示:

echo $row['Ime']."<button onclick='window.open(\"download.php?fileID=".$row['ID']."\");'>Download</button><br>";

这将打开一个新窗口,该窗口将下载文件

总数看起来像这样 对于download.php:

<?php
$fileID = htmlentities($_GET['fileID']);
$conn = mysqli_connect('localhost','root','usbw','down');
$fileID = mysqli_real_escape_string($conn, $fileID); // ALWAYS ESCAPE USER INPUT
$query = "SELECT * FROM datoteka where `ID`=$fileID";
$result = mysqli_query($conn, $query);
$result_check = mysqli_num_rows($result);
if($result_check > 1 || $result_check < 1){ //If more then 1 result die
    die('inavlid ID');
}
$row = mysqli_fetch_assoc($result);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$row['Ime']);
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
echo $row['filedata'];
?>

以及index.php

<?php
$conn = mysqli_connect('localhost','root','usbw','down');
$query = "SELECT * FROM datoteka";
$result = mysqli_query($conn,$query);
$result_check = mysqli_num_rows($result);
if($result_check > 0){
    while($row = mysqli_fetch_assoc($result)){
        echo $row['Ime']."<button onclick='window.open(\"download.php?fileID=".$row['ID']."\");'>Download</button><br>";
    }
}
?>

答案 1 :(得分:-1)

您可以在这里https://www.php.net/file_put_contents阅读, 您需要知道路径文件在哪里。例如:

  

/users/john/downloads/namefile.doc