如何使用 PhpMyAdmin 下载上传到 BLOB 字段的文件?

Posted

技术标签:

【中文标题】如何使用 PhpMyAdmin 下载上传到 BLOB 字段的文件?【英文标题】:How to download the file uploaded to a BLOB field using PhpMyAdmin? 【发布时间】: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

谢谢!

【问题讨论】:

【参考方案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');

用于查找“内容类型”的动态方法,用于在数据库中存储“文件名”和“扩展名”。

【讨论】:

以上是关于如何使用 PhpMyAdmin 下载上传到 BLOB 字段的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 phpMyAdmin 将数据从 zip 文件上传到 MySQL 数据库?

Laravel:如何通过 API postman 上传图像并将其保存到数据库(phpmyadmin)

自定义 phpMyAdmin 界面

如何在服务器上的phpmyadmin中上传一个大的sql文件

phpmyadmin配置

将表定义上传到 phpmyadmin 时出错