我在数据库中有一个blob字段。其中i存储由此产生的值:
mysqli_real_escape_string($mysql_link, file_get_contents($_FILES['file']['tmp_name']));
我创建了一个脚本来从数据库下载此文件。
脚本有效,文件已下载。但是有一个问题: 如果存储在那里的文件是图像文件,例如" jpeg"或者" png",一切都很好。但是,如果它是其他类型,例如" PDF",例如,当我打开它时,pdf阅读器无法读取该文件。说pdf已损坏。我不知道为什么它会发生在一些文件类型而不是其他文件类型。
这是下载脚本:
function download($filedata, $filename){
header('Content-Type: '.$filedata['mime']);
header('Content-Disposition: attachment; filename="' . $filename . "." . $filedata['extension']);
header('Pragma: no-cache');
ob_clean();
echo $filedata['data'];
exit;
}
$filedata
是数据库中提取的结果。我也根据每个文件检查了它并且值是正确的,毕竟,图像工作得很好。
真的欺骗了我!
假设执行此PDF示例,var值如下:
$filedata['mime'] = "application/pdf";
$filedata['extension'] = "pdf";
$filedata['data'] = the blob content;
$filename = uniqid();
提前谢谢!
更新
我用PDF文件进行了测试。从我的本地机器中选择一组工作PDF,上传全部,将它们存储在数据库中,使用上面引用的file_get_contents()
机制,然后使用下面引用的下载脚本将其全部下载。结果:一些下载的PDF文件有效,其中一些没有。
一位朋友告诉我一些关于文件编码的事情。这可以解释一些事件,一些文件,下载后,工作,一些不。可能吗?我怎么能解决它?
更新
我使用echo mb_detect_encoding($filedata['data']); exit;
和所有打印的" UTF-8",用于工作和不工作的文件。所以,它不是编码问题。还有其他想法吗?