我需要打印出我保存在数据库中的所有文件,然后才能下载它们。我能够回应它们,但是我不知道如何进行下载“按钮”以将它们下载到计算机。 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个,可能更多)
网站上每个文件名旁边应有一个下载按钮(或类似的东西),使我可以从数据库中下载该文件(一次仅下载一个文件,而不是一次下载所有文件)。
答案 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