一些blob下载的文件不起作用,但有些确实如此(PHP,Mysql)

时间:2016-02-25 20:56:19

标签: php download blob

我在数据库中有一个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",用于工作和不工作的文件。所以,它不是编码问题。还有其他想法吗?

0 个答案:

没有答案