从散列路径文件下载 Php


Php download from hashed pathfile

我在从散列文件路径下载文件时遇到问题。

我正在使用MySQL数据库,其中存储来自HTML表单的各种数据。最多可以上传三个不同的文件。这些将移动到服务器上的上载文件夹中。我正在使用 MD5 来防止重复文件上传。

数据库中的所有数据都从其他脚本调用。显示的下载链接数量取决于上传的文件量。我使用文件信息和标头来确定 mimetype 并下载文件。但是下载时我得到的只是一些带有随机文件夹和文档的zip文件或非扩展名文件,该文件提供正确的扩展名,打开并显示警告并最终显示正确的文件。

这是我的下载代码:

    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    print("</br>"); echo finfo_file($finfo, $_GET["fName"]);
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename= ". $_GET["fName"]);
    header("Content-Type: " .$finfo);
    finfo_close($finfo);
    header("Content-Transfer-Encoding: binary");
     // Read the file from disk
         readfile($_GET["fName"]);

$_GET["fName"]是由包含指定路径名的链接传递的变量(例如:./uploads/hashcode(。如何执行此操作,以便我可以正确下载文档?就像下载整个文档一样,而不是一些ZIP文件或非扩展名文件。

我已经与这个问题斗争了几天(在互联网上搜索以找到可用的东西(,我变得非常绝望。

附加说明:大多数情况下,下载的文件是从我的服务器下载的正确文件。它与上传文件夹中的哈希文件具有相同的名称。但它没有任何扩展名。

假设$_GET["fName"]是/uploads/randomhash/ABCDEFABCDEFABCDEF

.zip
header("Content-Disposition: attachment; filename= ". basename($_GET["fName"]));

这将使服务器将可下载文件命名为 ABCDEFABCDEFABCDEF

.zip

如果您保存的文件没有扩展名,那么您可能会遇到问题。如果您将原始文件名保存在数据库中,也许您可以在链接中添加额外的 $_GET['orginal文件名'],并使用它来生成带有扩展名的正确文件名。

您还在设置标题。如果您在它们之前输出任何内容,则它们设置不正确。在这里打印并finfo_file。你不应该那样做。

我认为你想要这样的东西,但你必须弄清楚如何获得正确的文件名到标题中的文件名=部分。

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= ". basename($_GET["fName"]));
header("Content-Type: " . finfo_file($finfo, $_GET["fName"]));
finfo_close($finfo);
header("Content-Transfer-Encoding: binary");*/
 // Read the file from disk
 readfile($_GET["fName"]);