1

当我从站点将文件上传到我的服务器时,它工作正常。但是,当我尝试下载它们时,文件每次都会损坏。如果我打开服务器上的文件管理器,我可以通过它下载文件,它们工作正常。我知道文件上传正常,下载过程似乎有错误。

这些文件保存在我的服务器上,由它们在表中的 ID 命名,后跟它们的扩展名。该名称是从数据库中检索的,并在下载时使用。

id  |  userid  |  filename   |   extension  |  size
1       2         test.jpeg       jpeg         123456

//the extension column is just for testing, yes I know it's redundant

test.jpeg 将作为 1.jpeg 保存在我的服务器上。

//this is the very first bit of code on the page aside from starting the session
if(isset($_POST['downloadFile'])){
    $file = new fileprocessing;
    $fileID = mysql_real_escape_string($_POST['hiddenFileDownload']);
    $file->serveFile($fileID); 
}

这是找到文件并允许用户下载它的 serveFile 函数

function serveFile($fileID){
    $sql = mysql_query("select * from files where id = '$fileID'");
    $file = mysql_fetch_array($sql);
    $ext = $file['extension'];

    header('Content-type: image/x-generic'); //I'm trying jpegs only right now

    header('Content-Disposition: attachment; filename="'.$file['filename'].".".$ext.'" ');

    readfile('/home/.../public_html/user_files/'. $fileID.".".$ext.' ');
}

下载文件时,它具有正确的名称。我不确定这是哪里出错了。我没有正确打开文件吗?

编辑 - 在我的 serverfile 函数中调整了我的扩展名

4

1 回答 1

1

听起来很奇怪,我过去在查看“.jpeg”文件扩展名时遇到了问题(我有一个网站,人们必须上传产品图片)。但是,可以将扩展名重命名为“.jpg”并在没有任何中断的情况下查看相同的文件。您可以尝试在上传时将“.jpeg”扩展名重命名为“.jpg”,然后查看下载/查看的结果是否没有改变。

于 2012-10-10T23:34:06.160 回答