在数据库中存储图像的有效方法是什么?

时间:2014-04-08 10:19:14

标签: mysql database image

在mySQL数据库系统中保存图像的最有效方法是什么?

  1. 选项1 - 将图像转换为BLOB数据类型并将其保存在单独的列中
    1. 选项2 - 将图像保存在单独的文件夹中,并将文件路径保存在相关的数据库列中

4 个答案:

答案 0 :(得分:3)

选项2对我来说因为,对于我从其他文章中读到的内容,将图像转换为blob会使进程变慢。与存储路径不同,您只需将其检索到数据库的路径字符串并检索得更快。

以下是 Storing Images in DB - Yea or Nay?

的其他相关文章

答案 1 :(得分:3)

答案 2 :(得分:1)

对于较大的图像,您应该使用文件系统,但对于像缩略图这样的小图像,我是这样处理的 typeorm

@Column({ type: "longblob" })
thumbnail: string;
<块引用>

顺便说一句,您应该在连接到同一服务器的 mysql 控制台中运行此命令以避免任何包大小错误

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

我使用内置的 FileReader API 将图像转换为 base64 字符串

// file param is coming from html input element
const reader = new FileReader();
// use try-catch because if user don't select a file it throws an error
    try {
      reader.onloadend = (e) => {
        const base64string = e.target.result;
        sendImageToServer(base64string);
        }
      }
      reader.readAsDataURL(file);
    } catch (error) {
      console.log(error);
    }

当您向客户端发送缩略图时,它会将其转换为缓冲区对象(例如 \

{
   type: "Buffer", 
   data: [
     // Uint8Array
   ]
}

所以我们需要再次转换它的base64字符串

// This 'toString' function will convert buffer array to base64 string
const thumbnail = Buffer.from(recipe.thumbnail).toString();
sendDataToClient(thumbnail);

然后显示图像很容易

// If you're using react like me you can do it like that 
<img src={base64stringFromServer} alt="thumbnail" />
// otherwise just select img tag with query selector then set 'src' attribute to 'base64stringFromServer
// and find a better variable name then this :)

我认为这是在数据库中存储图像的最佳方式。

答案 3 :(得分:-1)

我建议这样做: - 在文件系统中存储大图像。将小图像(如缩略图)存储在数据库中