在PHP中从mysql检索图像的问题

时间:2012-03-12 12:53:45

标签: php mysql image

我在将图像上传到mysql数据库之前使用了以下代码

在编码之前我已经完成了

$content = addslashes($content);
    $content = base64_encode($content);

然后我在数据库中测试了图像后输入正常。

但是,每当我尝试下载相同的图像时,它保存在文件系统上,但绝不让我查看它。因为,它给我不正确的图像文件。为什么会如此

  $file_data= $this->get_attachment($id);
            $content = $file_data['content'];
                $content = stripslashes($content);
            $content =  base64_decode();
            header("Content-length: ". strlen($content));
            header("Content-type: ".$file_data['filetype']);
            header("Content-Disposition: attachment; filename=".$file_data['filename']);
            echo $content;

紧急帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您正在发送base64编码字符串的文件长度$file_data['content']而是发送解码后的$content的长度。

$content =  base64_decode($file_data['content']);
// Send the Content-length of the decoded data $content
// Should work, since strlen() is binary safe
header("Content-length: ". strlen($content));

答案 1 :(得分:0)

  

为什么会这样[?]

您已将一些数据存储到数据库中。在检索时,您没有获得原始数据。这就是原因。

造成这种情况的原因是什么?可能有很多事情导致这种情况。根据您在问题中列出的信息,我只能猜测:

  • 给出错误的长度(在您的情况下,保存为进程可能需要更多字节,然后发送并使用NULL-bytes或其他类似的东西填充文件)。
  • 提供错误的数据。由于截断,您从数据库中检索的数据可能不再是原始数据,例如您存储数据的字段太小,无法保留所有数据。

请仔细检查代码的编码/解码部分(测试它!)并确保database column has a fitting type­Docs也可以存储您的数据。将原始内容的长度与从数据库中检索的长度进行比较。此外,您可以为数据添加校验和(例如md5)以测试其是否已更改。