我正在一个人们可以上传和下载文件的网站上工作。我可以按照自己的方式进行上传,并且也可以下载到该文件夹。我唯一遇到的问题是找到一种下载单个文件而不是全部文件的方法。以下代码用于从服务器/数据库下载。
// Downloads files
if (isset($_GET['file_id'])) {
$id = $_GET['file_id'];
// fetch file to download from database
$sql = "SELECT * FROM files WHERE id= $id";
$result = mysqli_query($conn, $sql);
$file = mysqli_fetch_assoc($result);
$filepath = 'uploads/' . $file['name'];
if (file_exists($filepath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($filepath));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('uploads/' . $file['name']));
readfile('uploads/' . $file['name']);
// Now update downloads count
$newCount = $file['downloads'] + 1;
$updateQuery = "UPDATE files SET downloads=$newCount WHERE id=$id";
mysqli_query($conn, $updateQuery);
exit;
}
}
下面的代码是PHP / HTML站点的代码,其中显示了所有文件,并允许用户下载文件。我只想列出一个文件,并可以选择链接到任何文件,而不是全部文件。如果将$ sql =“ SELECT * FROM files WHERE id = $ id”更改为7之类的数字或任何ID号,则可以下载一个文件,但是它仍然显示所有其他文件,但仍然只下载该文件每个链接上的ID 7。
<thead>
<th>ID</th>
<th>Filename</th>
<th>size (in mb)</th>
<th>Downloads</th>
<th>Action</th>
<tr>
<td><?php echo $file['id']; ?></td>
<td><?php echo $file['name']; ?></td>
<td><?php echo floor($file['size'] / 1000) . ' KB'; ?></td>
<td><?php echo $file['downloads']; ?></td>
<td><a href="downloads.php?file_id=<?php echo $file[$id]? >">Download</a> </td>
</tr>
如果有人能让我知道我在想什么,我将不胜感激。