2010-12-13 96 views
1

我目前将上传到CMS的文件存储在数据库中。我的问题并没有要求替代。我面临的问题是从面向公众的Web服务器提供文件时。CFContent的替代品?

理想情况下,我可以将文件缓存在文件系统中的Web服务器上,但是存在问题。系统允许使用相同的文件名上传不同的文件,并且我不想使用UUID或MD5哈希来缓存文件,因为我希望最终用户能够在保存对话框中拥有文件名。

我有cfcontent的问题是

  1. 每到一个文件请求加载该文件到内存中,我不介意做这个曾经创建缓存。
  2. cfcontent不允许http下载组块,以便最终用户停止下载文件并稍后尝试恢复它。
  3. 对大文件的请求过多将会限制并发请求并强制普通页面请求进入队列。

P.S.这些文件存储在数据库中,因为数据库是CMS和公共站点之间唯一的通信形式。

回答

2

随口说说,我建议使用主键从DB作为目录的名字,这样你就可以保留原始名称的文件,并将它们存储在服务器上的唯一位置。

所以,假设有人上传document.docx,并为其分配了ID 3.您的URL将指向/content/3/document.docx或类似内容。

+0

我认为这可能是一条路,您是否可以想到这样做的缺点? – 2010-12-15 00:20:29

+0

主要的缺点是,你可能得到非常糟糕的目录扩散。如果你认为会有超过几百个文件,你可以看看分组的方式,比如/ content /#client#/#docuID#/#document_name# – 2010-12-15 14:19:11

+0

那么好的一面是每个站点都有自己的缓存文件夹,所以没有两个网站会混合文件。 – 2010-12-19 06:25:34

0

这是一个棘手的问题,就好像您在数据库中有图像一样,您需要某种Servlet才能使它们在最终浏览器中可用。这意味着,除非您的数据库有某种直接向浏览器公开图像的方式,否则必须有一些内存中的处理。

您可以使用cfimage来显示它,但我期望它具有与上面概述的完全相同的问题。

我有一个quick look on Google,但找不到任何明确满足您需求的东西(这很奇怪,我原以为会有东西),但是写一个Servlet并将其部署在JRUN使用你想要的方式提供图像,这取决于你的Java知识有多好。