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

时间:2014-06-04 07:11:38

标签: php mysql phpmyadmin blob

我正在使用PhpMyAdmin版本4.2运行localhost mysql服务器。我创建了一个带有MEDIUMBLOB列的表来存储文件。我可以正确上传* .doc文件,但是当我单击文件链接时,它会将其作为“tablename-columnname.bin”bin文件下载。

然后我尝试将此“tablename-columnname.bin”手动重命名为“original_file.doc”,并且可以正确打开文档。

问题:为什么phpmyadmin不按原样下载文件?我该怎么办才能修复它?我知道一点php

谢谢!

2 个答案:

答案 0 :(得分:1)

使用'标题'在回显文件之前

header('Content-type: application/msword');

以动态方式查找“内容类型”'用于存储'文件名'用'扩展'在数据库中。

答案 1 :(得分:0)

为了使它有点动态(基于MIME),我做了以下更改:

在tbl_get_field.php文件中,最后几行:


    $mime = PMA_detectMIME($result);
    switch($mime){
        case 'image/jpeg':
            $extension = 'jpg';    
        case 'image/gif':
            $extension = 'gif';
        case 'image/png':
            $extension = 'png';
        case 'application/pdf':
            $extension = 'pdf';
        default:
            $extension = 'bin';
    }
    PMA_downloadHeader(
        $table . '-' .  $_GET['transform_key'] . '.' . $extension,
        $mime,
        strlen($result)
    );
    echo $result;

上面的代码应输出具有正确扩展名的文件,而不是始终" .bin"。

在mime.lib.php文件中,我们需要检测更多MIME案例:


    function PMA_detectMIME(&$test)
    {
        $len = strlen($test);
        if ($len >= 2 && $test[0] == chr(0xff) && $test[1] == chr(0xd8)) {
            return 'image/jpeg';
        }
        if ($len >= 3 && substr($test, 0, 3) == 'GIF') {
            return 'image/gif';
        }
        if ($len >= 4 && substr($test, 0, 4) == "\x89PNG") {
            return 'image/png';
        }
        return 'application/octet-stream';
    }

我想在此添加pdf和word doc,但我不知道如何根据流字符确定其MIME类型