我在一个我已经工作了一段时间的项目中遇到了一个严重的问题。
用户将文件上传到课程。上传脚本采用文件名,用下划线替换空格,删除文件扩展名,添加一个 4 位数字,然后重新添加扩展名。
但是,文件完美地上传到服务器(直接从“上传”文件夹打开时,它们很好)。当下载到用户的计算机时,除了 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 变量中检索的。
任何帮助将非常感激!