使用ColdFusion和MySQL处理多个图像

时间:2010-02-19 19:48:25

标签: mysql image coldfusion imagesource

这是一个架构问题,但它的解决方案在于ColdFusion和MySQL结构 - 或者至少我相信。

我的数据库中有一个产品表,每个产品都可以有任意数量的屏幕截图。我目前显示产品屏幕截图的方法如下:

我有一个文件夹,其中包含与所有产品相关的所有屏幕截图。所有屏幕截图的命名与数据库中的productID完全相同,加上前缀。

例如:产品ID为15的产品的屏幕截图位于文件夹图像中,名称为15_screen1.jpg,15_screen2.jpg等......

在我的ColdFusion页面中,我将图像路径硬编码为HTML(images /);图像名称分为两部分;第一部分是使用查询中的productID动态生成的;第二部分是前缀,并且是硬编码的。例如:

<img src"/images/#QueryName.productID#_screen1.jpg">
<img src"/images/#QueryName.productID#_screen2.jpg"> etc...

这种方法有效,但它有以下最大的限制:

  1. 我必须在HTML模板中硬编码确切数量的屏幕截图。这意味着我可以显示的屏幕截图数量始终相同。如果一个产品有10个屏幕截图,而另一个产品有5个屏幕截图,则不起作用。
  2. 我必须将图像前缀硬编码到我的HTML中。例如,我最多可以有五种与一种产品相关的屏幕截图:productID = 15可能有15_screen1.jpg,15_screen2.jpg,15_FrontCover.jpg,15_BackCover.jpg和15_Backthumb.jpg等...
  3. 我考虑过在我的产品表中创建一个路径列,但这意味着为每个产品创建数百个文件夹,这似乎也没有效率。

    对于解决此问题的正确方法,有没有人有任何建议或想法?

    非常感谢!

3 个答案:

答案 0 :(得分:2)

怎么样......

使用Image表,一个产品到多个图像(带有可选的sortOrder列?),并使用imageID作为jpeg文件名?

<强>更新

拥有一个ImageClass表,许多Image到一个ImageClass。

Image
-----
ID
productID
imageClassID (FK to ImageClass)

使用后端业务逻辑来强制执行某些类只能有一个图像。

或者...... 如果你真的想强制执行某些类只能有一个图像,那么可以选择更复杂的设计:

Product
------
ID
name
...
frontCoverImageID
backCoverImageID
frontThumbImageID
backThumbImageID

Image
-----
ID
productID
isScreenShot (bit)    // optional, but easier to query later...

但是,我更喜欢第一个更好的,因为你可以拥有你认为合适的课程,而无需重构数据库。

答案 1 :(得分:1)

保持数据库中有多少图像和哪些图像的信息绝对是可行的方法。

除非你想使用命名约定将图像与产品相关联,并且图像的数量是任意的,那么为每个产品创建一个文件夹可能更好:

/images/products/{SKU1}/frontview.jpg
/images/products/{SKU1}/sideview.jpg
/images/products/{SKU2}/frontview.jpg

等等。然后使用<cfdirectory>收集给定产品的图像。您可能还想为图片命名00_frontview.jpg01_sideview.jpg等,以便您可以对页面上显示的顺序进行排序和控制。

答案 2 :(得分:1)

使用cfdirectory标签检查文件系统:

<!--- get a query resultset of images in filesystem --->
<cfdirectory action="list" name="images" directory="images">

<!--- get images for specific product --->
<cfquery name="productImages" dbtype="query">
select *
from images
where name like '#productid#%'
</cfquery>

<cfoutput query="productImages">
    <img src="#productimages.directory#/#productimages.name#" />
</cfoutput>

您甚至可以尝试使用filter属性来cfdirectory尝试省略QoQ