请问附件机制如何设计

墨仝mt 发布于 2014/02/21 11:22
阅读 535
收藏 3

在CMS中,经常会用到附件,例如图片,文件,多媒体等

请问用户在文章里上传的文件没有用到或者最后未保存该文章,该如何识别附件的有效性?

以下是问题补充:

@墨仝mt:目前设计是数据库有一张附件表,存储附件的信息.而附件实体存储在文件系统 (2014/02/21 11:33)
加载中
1
Wss_绍铖
Wss_绍铖
自动保存草稿
墨仝mt
墨仝mt
就是说从用户点击新建文章的时候就生成一个记录,这样就有文章ID了是吗? 如果最后用户放弃提交的话就删除在这个文章内提交的附件
1
月影又无痕
月影又无痕

稍微繁琐一点,但可靠的方法:

内容编辑过程中,将附件保存在临时目录中。

当编辑提交后,将临时目录中的附件发布到正式目录中(需要改写内容中的路径),然后定期清理临时目录中的旧(比如修改时间为3天前)文件。

墨仝mt
墨仝mt
这么说就是2个目录,一个临时文件,一个已保存的文件
Zoker
Zoker
这个可以,但是存为草稿的也要从临时目录拉出去。
1
开源中国首席男科主任
开源中国首席男科主任
我看了帝国cms的方法, 其实还是临时分配了标识给附件
附件表

fileid(附件id)  filename  path(目录)   id(附件所在的文章id)   cjid(文件临时编号)

1001              test.jpg   /xxx/xxx/     1392982268               1392982268

在文章发表页面上传附件时,会将附件记录到数据库,因为文章还没发布没有文章id,所以附件表里的 id=cjid=上传时的unix时间戳

当文章发表时,才会再将附件的 id更新为文章id,cjid更新为0.

fileid(附件id)  filename  path(目录)   id(附件所在的文章id)   cjid(文件临时编号)

1001              test.jpg   /xxx/xxx/                   1                0

在清理冗余附件时的判断条件是这样的

//清理信息附件
DelFileAllTable("cjid<>0 and (id=0 or cjid=id)");

墨仝mt
墨仝mt
谢谢热心帮助.帝国的我也看了.有个问题比较困惑,如果发表文章后,用户将其中一个引用到文章内的图片从content里去掉了,这样的情况可以正确判断未使用么?
0
osc_924152
osc_924152
做一个控制台程序或者服务,定时查询数据库里边的附件跟服务器的文件进行比较。不存在数据库的文件进行删除操作。
osc_924152
osc_924152
定期的时间可以稍微设置长点,一个月或一年清理一次。 其他同学的临时存储也是可以的,只有提交的文章的附件才正式存储到服务器中,加上删除文章则清除文章关联的文件,临时目录可以定期清楚,那样就不用全文搜索附件了。很不错,呵呵。
墨仝mt
墨仝mt
全文搜索附件吗?这样非常消耗系统资源.附件只在数据库存储文件名,实体存在文件系统
0
开源中国首席男科主任
开源中国首席男科主任

上传附件的时候把附件信息入库,附件关联文章id,定期清理附件,如果文章id不存在或者为空,就删除该附件。

这样在删除文章的时候,也就可以删除该文章id下的所有附件。

墨仝mt
墨仝mt
文件上传的时候文章还没有提交,文章ID还是不存在的
0
吃鱼的虾米
吃鱼的虾米
…附件上传初始文章为0表示未使用,文章保存后更改附件的文章id不就行了,同时做一个附件管理功能就能解决附件的管理问题,文章发布页可以做一个未使用附件的提示功能
吃鱼的虾米
吃鱼的虾米
@獨家微笑 参考dz的实现方式撒,图片的显示是通过一个标签实现的,文章编辑的时候会提取标签里的附件id来变更附件的状态,这样就不会存在僵尸附件的问题
墨仝mt
墨仝mt
提交后把文字里的图片删掉了又如何?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部