【问题标题】:How do I store the location of an image in a database?如何将图像的位置存储在数据库中?
【发布时间】:2011-05-25 13:44:22
【问题描述】:

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

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

非常感谢任何指导。

问候特里斯蒂安。

【问题讨论】:

    标签: sql mysql image file


    【解决方案1】:

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

    它会包含这样的数据:

    ~/images/image1.jpg

    【讨论】:

    • 另外,我应该对字符采取什么预防措施?
    【解决方案2】:

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

    如果是用户字段,别忘了设置为 UTF-8

    【讨论】:

    • 嗨,是的,我也是这么想的,你能举个相对路径的例子吗?
    • 我认为他只是指引用数据的路径,无论是在文件系统本身中,还是在某种 ftp/url 中。
    【解决方案3】:

    这确实被问了很多:

    store image in database or in a system file?

    【讨论】:

    • 是的,我已经搜索过,甚至尝试了不同的搜索词,但它返回了相同的答案。
    【解决方案4】:

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

    在数据库中保存特定域路径的思考

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

      • 缺点:如果假设我们想要迁移到新的存储并且我们有多个 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2012-06-08
      • 1970-01-01
      • 2010-09-22
      相关资源
      最近更新 更多