Database 将图像存储在数据库中而不是文件系统中
我们都知道,在讨论使用数据库存储文件(特别是图像)时,有多少争论和生命已经消失。在决定如何继续我的项目时,我有点左右为难 我有一个允许管理员上传员工照片的网站。现在,这些图片存储在我的MySQL数据库中的BLOB中。此外,我还有一个windows应用程序,与网站一起运行。此应用程序使员工能够在成功打卡后打卡并显示其照片。通过应用程序内的mysql查询(从非本地远程位置)检索图片,该查询将图像内容转换为可读图像,并在图片框中输出,从而确认员工的身份 在我看来,将图像存储在数据库中并通过简单的查询检索它们要容易得多。我发现这比在数据库中存储图像路径和处理应用程序下载图像要容易得多。我也不必处理冲突、文件夹组织和安全性以及由于x、y等原因重新编写的路径 数据库中存储的图像在裁剪到一定大小后仅为20KB。我的问题是,是否仍然值得在数据库中嵌入图像路径,还是应该像现在这样存储它们?如果在这种情况下在数据库中存储图像仍然是不明智的,那么是否有一种正式的方法来存储图像路径Database 将图像存储在数据库中而不是文件系统中,database,Database,我们都知道,在讨论使用数据库存储文件(特别是图像)时,有多少争论和生命已经消失。在决定如何继续我的项目时,我有点左右为难 我有一个允许管理员上传员工照片的网站。现在,这些图片存储在我的MySQL数据库中的BLOB中。此外,我还有一个windows应用程序,与网站一起运行。此应用程序使员工能够在成功打卡后打卡并显示其照片。通过应用程序内的mysql查询(从非本地远程位置)检索图片,该查询将图像内容转换为可读图像,并在图片框中输出,从而确认员工的身份 在我看来,将图像存储在数据库中并通过简单的查询检
在此方面的任何帮助都将不胜感激。如果这个问题不属于这里,我很乐意把它移走。我认为在数据库中存储图像是个坏主意的原因有几个: 1) 服务器将具有与数据库无法跟踪的文件关联的时间戳信息。如果您出于取证原因需要这样做,DB解决方案可能会在这方面受到限制。尽管如此,您也可以在DB中自由保存有关上传图像的信息,如IP信息、时间戳等 2) 如果您希望这些文件被(比如)另一个系统/服务使用,那么您必须不断地引用数据库并与之交互,而此时您可以更轻松地只针对一个特定的文件夹 3) 每当需要检索图像时,必须打开与数据库的连接才能生成图像。这可能会添加额外的代码和步骤,通过指向文件夹可以更容易地实现 为了避免命名冲突,如果我在Linux机器上,我会在保存文件名时使用Unix时间戳之类的东西作为文件名的前缀,或者干脆使用它(+可能是一个简短的随机数#)作为图像ID。因此,它不是“jane image.jpg”,而是“1407369600_img3547.jpg”。然后,只要在DB和viola中引用它,这是一个足够随机的ID,永远不会发生冲突,除非时间开始倒流。显然,无论Windows时间戳等价物是什么,都会被使用
注意:您现在所做的还不错,从听起来它可能对您最有用……但一般来说,我尽量不将所有内容都放在数据库中,因为我可以。但这就是我:)如果图像是用户数据,而不是应用程序代码或主题的一部分,那么将图像存储在数据库中是一个好主意,因为
- 如果您只需要备份数据库,则备份更易于管理。另一方面,如果在数据库中存储一些应用程序数据,在文件系统中存储一些应用程序数据,则必须协调数据库和文件系统的备份计划,以确保两者一致 如果你有一个数据库管理员任你支配,那就太好了!您的备份应该已经处理好了。如果没有,那么数据库备份的设置可能会有点困难,但一旦有了备份系统,它可能会比文件系统备份更好。例如,许多数据库系统都支持流式复制
- 如果您的应用程序是负载平衡的,并且由多个Web服务器池提供服务,那么您要么必须将数据复制到所有计算机,要么使用网络文件系统在服务器之间共享数据
- 存储在数据库中的图像将是权威数据
- 您的应用程序可以使用一种功能将它们提取为本地文件系统中的文件,作为一种缓存。该缓存可以在任何时候重建,因为它不是权威的
- 然后,Web服务器可以直接从文件系统为文件提供服务