yueyoum
2014-04-27 00:27:41 +08:00
以前我的处理方式是:
简化一下
附件表
topic_attachment
+------+---------+--------------+-----------+
| id | name | upload_date | topic_id |
+------+---------+--------------+-----------+
上传图片会先存入 topic_attachment 表,
insert into topic_attachment (topic_id) values (0)
注意这里把 topic_id 设置为0
当帖子发布成功后,就把 topic_id 设置为当前发表的帖子ID。
如果 上传完附件 ,但是帖子没发表。
当下次打开网页的时候,
就把 select * from topic_attachment where topic_id = 0;的结果返回
并提示 这些附件 需要处理,如果不处理,多少天之后会删除。
用户如果顺着提示点进去,再发贴的时候,就可以勾选这些列出来的附件。
发表完,就把那些勾选的 attachment topic_id 设置为当前发布帖子的ID。
整个流程就是这样, 既方便了用户,也给予了明确提示(如果不处理,多少天要删除)。
顺便也清理了服务器上的无用文件。
————————————————————————————————————————————————————————————————————
如果现在让我重新设计,
我会用redis。
用户只要是在编辑帖子,javascript 就不停的 ajax post 帖子的内容到 server。
server 将这些内容塞进redis,当然post的文件还是存磁盘。
如果用户编辑到一半,关闭了浏览器,再打开帖子i编辑器的时候,
javascript会向server 查询是否有帖子缓存在redis中,如果有,server会返回帖子内容,
javascript自动填充, 这样就有了自动保存的功能。
当用户点击了发表按钮后,POST到server,server再去存mysql,清理redis。
如果用户编辑到一半,然后在也不打开帖子编辑了怎么办?
用定时任务来处理,比如对于已经缓存了1周的帖子,就清除,连同它的附件。