1

首先,感谢您看这个。请允许我解释一下:

我在磁盘上有图像,我想将它们放入数据库中的 longblob 字段中。我读过这通常是不鼓励的,但这仍然是我的应用程序中需要的东西。

要导入图像,我的班级中有以下代码:

$file_handle = fopen("$folder_path/$image","rb");
$file_content = fread($file_handle,filesize("$folder_path/$image"));

$image_record["file_name"] = $image;
$image_record["file_folder_id"] = $folder_data["folder_id"];
$image_record["file_owner_id"] = $this->current_user_data["user_id"];
$image_record["file_mime_type"] = mime_content_type("$folder_path/$image");
$image_record["file_binary"] = addslashes($file_content);

if($this->db_insert("file", $image_record))
{

    $this->view_file($this->load_file($image));
    echo header("Content-type:".$image_record["folder_type"]);
    $this->view_file($this->load_file($image));
    echo stripslashes($image_record["folder_binary"]);
}

看来,当我尝试将二进制文件保存到数据库时,图像数据被该进程损坏了。

使用完全相同的代码,$db->insert() 语句在另一个具有几乎相同数据库架构的网站上工作得很好,除了它工作的事实,存储引擎是 InnoDB 而不是 MyISAM。

if 语句中的代码始终显示图像,因此我对读取文件或显示文件时发生的数据损坏表示怀疑。

请帮助我了解发生了什么。

谢谢!

4

1 回答 1

-1

您应该对图像进行 base64 编码并将它们存储在一个长文本字段中,至少这是我所做的,我发现它工作得很好。此外,当从您的数据库中获取 base64 记录时,您可以将 base64 字符串回显到图像 src 属性中......这是文档: http: //php.net/manual/en/function.base64-encode。 php

于 2012-08-24T17:16:45.980 回答