问题与PHP从MySQL检索图像
我已经提供的图片上传到mysql数据库问题与PHP从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;
急需帮助将不胜感激。
您正在发送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));
感谢您的紧急答复,我已经测试了它,但是,没有运气 – 2012-03-12 12:58:35
为什么会这样[?]
已存储一些数据到数据库中。在检索时,你没有得到原始数据。这就是为什么。
这是什么造成的?可能有很多事情导致这种情况。从你在你的问题已经提出的这些信息,我只能猜测:
- 错误的长度给(你的情况另存为过程所期望的更多的字节然后发送和衬垫用NULL字节或别的文件深奥)。
- 给出的数据错误。您从数据库检索到的数据可能由于截断而不再是原始数据,例如,您存储数据的字段太小而无法保存所有数据。
请仔细检查您的代码的编码/解码部分(测试它!)并确保database column has a fitting typeDocs以及存储您的数据。将原始内容的长度与从数据库中检索的长度进行比较。另外,您可以为数据添加校验和(例如md5
),以测试数据是否已更改。
当我检索文本文件时,它工作正常,但每当我去寻找二进制文件,它给了我这样的困难时期。 – 2012-03-12 13:21:40
最初的图像数据有多大(以字节为单位)? 'base64-encode'甚至会使它变大。并且列旁边的大小有限制,例如,用于与数据库进行通信。我建议你首先删除base64编码,因为LONGBLOB数据类型非常好地存储二进制数据。 – hakre 2012-03-12 13:25:51
我刚刚测试了一件事,但不知道为什么发生这样的事情,我上传的图像是680KB,但我下载的图像是698 KB – 2012-03-12 13:50:33
什么是你正在存储base64字符串的MySQL列的数据类型?如果它是varchar而不是TEXT或BLOB,则可能会截断。 – 2012-03-12 13:01:46
...并且根据大小,可以用TEXT和BLOB截断。 – hakre 2012-03-12 13:03:43
我已经使用LongBLOB,所以基本上它不是一个截断问题 – 2012-03-12 13:05:30