我有一个简单的html表单,可以保存电子邮件和多个附件路径。我正在保存服务器上的文件及其到数据库的路径。
现在我如何从其路径中检索文件,然后将其显示给用户,当点击“下载”时,我使用以下代码获取文件,但这不起作用
$query = "
SELECT `type`, `name`, `size`, `file1`,`file2`,`file3`,`file4`,`file5`
FROM `upload` WHERE `id` = {$id}";
$result = $dbLink->query($query);
if($result) {
if($result->num_rows == 1) {
$row = mysqli_fetch_assoc($result);
header("Content-Type: ". $row['type']);
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment; filename=". $row['name']);
$path = $row['file1'];
$dir = opendir($path);
echo $dir;
while ($dir && ($file = readdir($dir)) !== false) {
echo $file;
}
回显的文件不包含任何数据。
我现在只做一个文件,其路径为“file1”。同样,我有5个附件路径,我必须在这段代码中全部检索它们。 请问我该怎么做。
答案 0 :(得分:0)
首先:您不能有这样的多个下载。您只能发送一次该标题即可。
$ path是文件的完整路径吗?您可以尝试使用is_readable($ file)在测试中首先进行检查。一旦你掌握了完整的路径,那很简单。
header("Content-Type: application/octet-stream");
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment; filename=". $row['name']);
readfile($row['file1']);
exit();
Readfile直接输出并对其进行流式传输,因此您无需阅读内容然后将其输出。添加退出以确保在其后没有添加其他输出,或者您可能损坏该文件。
这是有效的,假设$ row [' file1']有正确的路径!
对于多个文件,您必须进行多次调用。就像给用户多个链接一样,他们可以点击进行下载。
唯一的选择是你使用zip将它打包在一起,并将其作为一个大型zip文件发送。