如何将图像的位置存储在数据库中?

时间:2010-12-14 21:31:04

标签: sql mysql image file

我有一个颜色列表,我希望向特定用户显示纹理,因此我需要加载特定用户拥有的颜色图像,颜色的信息包含在ObjecDTO中,其中一个属性是它的形象路径。我的问题是我应该如何将图像路径存储在数据库中,是否有任何特殊规则,例如,因为数据库和图像文件在同一台服务器上,我应该存储完整的文件URL,还是相对的URL,应该是什么字符我逃避等等,还是有比我更好的方法?

我在网上搜索过,但主要指的是在数据库中存储BLOB,我发现这是一种不好的做法。

非常感谢任何指导。

对待Tristian。

4 个答案:

答案 0 :(得分:5)

创建一个名为image_path VARCHAR(255) NOT NULL

的列

它将包含这样的数据:

~/images/image1.jpg

答案 1 :(得分:2)

我真的建议存储相对路径并将剩余的路径作为配置。这样,您可以更轻松地迁移。对于数据类型,我建议使用varchar(255)行,并确保代码中的限制。

如果是用户字段

,请不要忘记将其设置为UTF-8

答案 2 :(得分:0)

这真的被问了很多:

store image in database or in a system file?

答案 3 :(得分:0)

分享我对我们为应用程序选择的一种中间解决方案的想法。我将讨论这里讨论的一些建议的利弊,这些建议将有助于理解我的中间解决方案。

关于在数据库中保存特定域路径的想法

  • 如果我们将特定的域路径保存到图像。 (例如:/user/{id}/avatar/img.png
    • 优点:如果我们想将完整路径移动到新存储,并且我们有一个(或可数的)端点消耗我们的数据库,那么很容易,只需将具有相同结构的图像移动到新存储,并通知所有依赖的应用程序/API 将存储 url 更新为新的存储 url。

    • 缺点:假设我们想要迁移到一个新的存储并且我们有多个 API 与我们的数据库交互,或者我们已经暴露给第三方并且他们在内部重新分发到其他 API。

      如果你在保存相对路径的同时有这样的依赖关系,这并不容易。每当您更新存储时,您都必须与应用程序/第三方共享 blob 路径,以使他们能够呈现您的图像。它将为直接使用您的数据库的所有 API 创建严重的依赖关系。如果您的 API 是公开的,那么您必须支持和同步这两个存储,直到所有 API 都更新。

关于在数据库中保存完整路径的想法

  • 如果我们将url的完整路径保存在数据库中。 (例如:www.example.com/user/{id}/avatar/img.png
    • 缺点:显然,您已经创建了对存储 url 的严重依赖。
    • 优点:应用程序使用您的 API 或直接使用您的数据库的 API,无需担心图像的路径。

中间解决方案:

  • 今天,我与我的团队建立了联系,为一个拥有大约 1 TB 数据库并且严重依赖多个 API 和公共 API 的应用程序解决了这个问题。在观察了两种场景的优缺点后,我们想到了一个中间解决方案,如下所示:

    • 我们将创建一个新的重写 url 并将此 url 指向我们实际的 blob url。这是什么意思:这意味着,我们之间会有一个 url,它只会映射到实际的 存储地址。所以,即使我们在数据库中保存了完整的路径,我们也会用新创建的 url 保存,如果将来我们必须迁移到新的存储。然后从后端我们将更新重写 url 以指向新的存储。
    • 因此,对于我们的应用程序,我们决定保存这个完整的中间 url。这将帮助我们减少集成依赖,其中多个 API 直接调用我们的数据库。如果将来我们必须迁移到新的存储,那么我们只需要从后端更新重写 url。