【问题标题】:How to download the file uploaded to a BLOB field using PhpMyAdmin?如何使用 PhpMyAdmin 下载上传到 BLOB 字段的文件?
【发布时间】:2014-07-24 17:40:15
【问题描述】:
我正在使用 PhpMyAdmin 4.2 版运行 localhost mysql 服务器。我创建了一个带有 MEDIUMBLOB 列的表来存储文件。我可以正确上传 *.doc 文件,但是当我单击文件链接时,它会将其下载为“tablename-columnname.bin”bin 文件。
然后我尝试手动将这个“tablename-columnname.bin”重命名为“original_file.doc”,文档就可以正确打开了。
问题:为什么 phpmyadmin 不按原样下载文件?我能做些什么来修复它?我懂一点php
谢谢!
【问题讨论】:
标签:
php
mysql
phpmyadmin
blob
【解决方案1】:
为了让它有点动态(基于 MIME),我做了以下更改:
在 tbl_get_field.php 文件的最后几行:
$mime = PMA_detectMIME($result);
开关($mime){
案例“图像/JPEG”:
$extension = 'jpg';
案例“图像/gif”:
$extension = 'gif';
案例“图像/PNG”:
$extension = 'png';
案例“申请/pdf”:
$extension = 'pdf';
默认:
$extension = 'bin';
}
PMA_downloadHeader(
$表。 '-' 。 $_GET['transform_key'] 。 '。' . $扩展,
$哑剧,
strlen($结果)
);
回显$结果;
上面的代码应该输出带有正确扩展名的文件,而不是总是“.bin”。
在mime.lib.php文件中,我们需要检测更多的MIME案例:
函数 PMA_detectMIME(&$test)
{
$len = strlen($test);
if ($len >= 2 && $test[0] == chr(0xff) && $test[1] == chr(0xd8)) {
返回“图像/JPEG”;
}
if ($len >= 3 && substr($test, 0, 3) == 'GIF') {
返回“图像/gif”;
}
if ($len >= 4 && substr($test, 0, 4) == "\x89PNG") {
返回“图像/png”;
}
返回“应用程序/八位字节流”;
}
我想在其中添加pdf和word doc,但我不知道如何根据流字符确定它们的MIME类型
【解决方案2】:
在回显文件之前使用“标题”
header('Content-type: application/msword');
用于查找“内容类型”的动态方法,用于在数据库中存储“文件名”和“扩展名”。