Moodle:通过文件 API 上传的文件在查看时损坏

Moodle: Files uploaded via File API get corrupted when viewed

所以我正在开发一个新的 course-format,其中一张图片与课程中的每个 activity 相关联,并以视觉方式呈现。我创建了课程格式,覆盖了渲染器等。一切正常。但是,图像应该是自定义生成的,并且由于它必须适用于所有现有和未来,我在通用课程模块表单中添加了一些额外的代码,以启用图像上传。

诚然,在我为使文件 API 工作而付出了一些努力之后,现在一切正常。只有在我的课程格式中,才有一个额外的标题,您可以在该标题下上传单张图片。这很好地保存到数据库中,它不在草稿中,如果我遵循数据库中的 contenthash,它可以在我的 dataroots filedir 中完美查看。它甚至作为默认罚款加载到表单中。但是,如果我尝试使用图像,所有测试 运行 都很好(.is_valid_img()etc),我什至可以下载文件。但是,当我这样做时它已损坏并且我的文件查看器显示:"Critical Error: Not a png file"。不用说它没有显示在我的实际课程网站上。

当我查看 filedir 中的文件时,它很明显是一个 png。拜托,我会很感激任何帮助,因为我已经尝试了很多并且束手无策。

在我看来,您似乎在发送 PNG 文件之前在页面上获得了某种输出 - 这将被添加到文件的开头并导致它不能作为 PNG 文件工作。

我建议您在十六进制编辑器中打开文件并检查文件的开头 - 它应该看起来像 https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header,因此请在这之前查找额外的字符。

至于额外字符的来源 - 它们可能是明显的警告/错误消息(应该很容易追踪和修复)。或者,您可能有一些杂散的 'echo' 语句(同样,很容易找到)。最糟糕的问题是安装中某处文件的开始 'php' 标签之前或文件末尾的结束标签之后的额外字符(这就是为什么你永远不应该使用结束 PHP 标签).找到这些将归结为搜索所有自定义代码文件以找到它们。