在文件系统中存储图像时,使用相对路径或绝对路径?

时间:2009-03-24 16:56:52

标签: database language-agnostic architecture image

我正在开发一个网络应用程序,我决定(在阅读很多关于SO的文章后)将实际图像存储在文件系统中,并将元数据存储在数据库中。

我应该存储相对路径还是绝对路径。

我可以为每个选择考虑一些优势。

绝对

优点:

很明显,该文件甚至可以读取数据库的其他应用程序 可以将照片放在驱动器上的任何位置(需要处理程序)

缺点:

需要将absoulte路径转换为在站点中使用的相对路径或创建处理程序
如果我迁移到另一台服务器,我可能需要更改所有路径

相对

优点:

只需将链接添加到html即可使用

缺点:

如果我更改应用程序根目录,我必须移动图片或更改所有路径
 必须将图片放在公共目录中(或者我在绝对路径上没有任何收获)

好的,这些是我现在正在做的一些事情。

我无法决定。

5 个答案:

答案 0 :(得分:6)

我会在数据库中存储相对路径。这为您提供了最大的灵活性。加载图像很简单,可以在“IMAGE_ROOT”变量(可能是可配置的)之前添加文件系统路径。这很重要,因为您可能想要移动存储图像的位置(例如,将它们放在更快的驱动器上)。然后它只是改变可配置的IMAGE_ROOT。

将图片引用放入页面时,我会输入完整的URL。同样,这只是将URL_ROOT添加到相对路径。如果您发现负载需要专用服务器来提供图像,则可以轻松切换服务器。

答案 1 :(得分:4)

如果您对数据库中信息的可移植性感兴趣,只需在数据库中存储基本路径。这样,当您移动文件时,您需要做的就是修改您存储在数据库中的基本路径。此信息应与文件路径分开存储。将这些信息存储在同一行会产生许多不必要的重复。

答案 2 :(得分:3)

我更喜欢将它们存储为相对路径,因此应用程序不依赖于它的位置。使用ASP.NET有“〜”自动表示应用程序根目录,你可以这样做,然后在使用它时简单地用常量替换它,这样你就不必担心如果更改应用程序根目录。< / p>

答案 3 :(得分:1)

如果您使用的是SQL Server 2008,则可以使用新的FILESTREAM data type巧妙地解决此问题。

答案 4 :(得分:0)

我同意。存储相对路径意味着数据库中的信息较少,如果在某处存储基本路径,则只需修改一次。然后,通过将数据库中较短的链接添加到基本路径来构建完整的URL。