0

我有一个简单的 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 个附件路径,我必须在这段代码中全部检索它们。请问我该怎么做。

4

1 回答 1

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 文件发送。

于 2012-04-16T19:48:53.543 回答