用PHP将BLOB图像从数据库保存到磁盘

用PHP将BLOB图像从数据库保存到磁盘,php,Php,我已经在数据库中以BLOB文件的形式存储了一个图像。这可能不是最好的做法(我知道这一点)。我想在我的页面上创建一个链接,当用户单击时,用典型的保存文件提示符提示用户,这样他们就可以将文件保存在他们的个人磁盘上 我已经在网上研究过了,但我正在尝试的似乎不起作用,它只是将字节发布到我的页面,而不是文件中。下面是我保存文件的代码。我使用的是一个框架,因此DB事务和retrevial代码可能看起来很奇怪,但值设置正确。这些文件在存储到DB之前也在base64中进行了编码,因此我调用decode函数将其返

我已经在数据库中以BLOB文件的形式存储了一个图像。这可能不是最好的做法(我知道这一点)。我想在我的页面上创建一个链接,当用户单击时,用典型的保存文件提示符提示用户,这样他们就可以将文件保存在他们的个人磁盘上

我已经在网上研究过了,但我正在尝试的似乎不起作用,它只是将字节发布到我的页面,而不是文件中。下面是我保存文件的代码。我使用的是一个框架,因此DB事务和retrevial代码可能看起来很奇怪,但值设置正确。这些文件在存储到DB之前也在base64中进行了编码,因此我调用decode函数将其返回到正常状态

function save_file($file_id) {
    $result = $DB->get_file($file_id);   
    $size = $result->fields['size'];  //1024
    $mime = $result->fields['mime'];  //image/jpg
    $name = $result->fields['name'];  //test.jpg

    header("Content-Disposition:attachment;filename=".$name);
    header("Content-Type=: ".$mime);
    header("Content-Length: ".$size);

    base64_decode(file);
    echo($file);
    exit();
}

我认为您的
内容类型
标题是错误的。那似乎是个打字错误

function save_file($file_id, $target_folder) {
    $result       = $DB->get_file($file_id);   
    $file_content = $result->fields['your_file_content_field'];
    $name         = $result->fields['name'];

    /* Decode only if the file contents base64 encoded 
     * before inserting to database.
     */
    $file_content = base64_decode($file_content);

    return file_put_contents($target_folder.'/'.$name, $file_content);
}