2

我在一个我已经工作了一段时间的项目中遇到了一个严重的问题。

用户将文件上传到课程。上传脚本采用文件名,用下划线替换空格,删除文件扩展名,添加一个 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 变量中检索的。

任何帮助将非常感激!

4

2 回答 2

3

Looks like you need

header("Content-Length: " . filesize($filepath));
ob_clean();
flush();
readfile($file);
exit;

See: How to Automatically Start a Download in PHP?

See also: Corrupted .docx download using phpdocx

于 2013-09-20T19:52:02.610 回答
0

您确定下载的文件的文件名中没有空格或其他特殊字符吗?因为当文件名中存在空格或其他特殊字符时会发生此类问题。

于 2012-12-23T16:13:36.267 回答