我遇到了一个我已经工作了一段时间的项目的严重问题。
用户将文件上传到课程。上传脚本采用文件名,用下划线替换空格,删除文件扩展名,添加4位数字,然后重新添加扩展名。
但是,文件会完美地上传到服务器(直接从“uploads”文件夹打开时,它们就可以了)。当下载到用户的计算机时,除DOCX文件和图像外,文件全部损坏。
PDF,Excel(xlsx)和powerpoint(pptx)在打开下载的文件时给出错误消息:“文件已损坏且无法打开”。
我必须下载的代码是:
<?php
class download extends Controller {
public function resource ($filename)
{
$filepath = realpath('./uploads/resources/courses/' . $filename);
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Pragma: no-cache');
readfile($filepath);
}
}
这是一个MVC,所以这就是为什么它在一个类中,$ filename是从文件名的$ _GET变量中检索的。
非常感谢任何帮助!
答案 0 :(得分:2)
看起来你需要
header("Content-Length: " . filesize($filepath));
ob_clean();
flush();
readfile($file);
exit;
答案 1 :(得分:0)
您确定下载的文件的文件名中没有空格或其他特殊字符吗?因为当文件名中有空格或其他特殊字符时会发生这样的问题。