发表文章时上传图片或附件处理方案 时间: 2019-12-28 15:44 分类: JAVA Web ####场景介绍 后台管理 -> 新建文章 -> 上传图片或者附件 -> 发布文章 这个过程就会有个问题,一般情况下,在新建文章的时候,在未点击发布之前数据库中是没有文章记录的,但是编写文章的时候可能就需要上传图片或者附件,大多数情况是上传图片和附件与发布文章是分开的两个步骤,而不是上传图片或附件与文章内容一并提交到服务器。 那么,最终图片或附件是如何与文章关联起来的?若是新建文章期间上传了图片,但是用户最终没有点击发布就关闭了浏览器,如果不进行处理,那么这些图片或附件就有可能成了服务器中的垃圾,永远都用不到了。 ####一种解决思路 新建如下表结构(Kotlin): ```kotlin data class Attachment ( val id: Int, var path: String?, //附件路径 var uploadDate: Date?, //上传时间 var topicId: Int? = -1, //主题ID var type: Int, //类型,比如:封面图片(0) 内容图片(1) 附件(2) val userId: Int //用户ID ) : Serializable ``` 在新建文章时用户上传了附件,直接插入到`tb_attachment`表中去,只不过此时的`topicId`是默认值`-1`,也就是未关联状态,然后将附件ID返回给前端页面。 当用户点击发布时,假设主题ID是自增的,那么就在插入主题返回ID之后将主题ID更新到`tb_attachment`表中去,比如: > UPDATE tb_attachment SET topic_id = #{topicId} WHERE userId = #{userId} AND id IN(前端传过来的附件ID列表) 以上是一个正常的主题发布过程,下面讲一下对于上传图片但未发布主题情况的处理。 首先上传附件还是同上,不管用户点没点击发布按钮都将数据存进数据库,如果用户未发表就关闭了浏览器也没关系。 当用户下次新建文章时,可以查出未使用的附件: > SELECT * FROM tb_attachment WHERE userId = #{userId} AND topicId = -1 然后提示用户用这些已存在的附件可供选择使用。 假设用户一直都不使用,那我们就只能用定时任务来处理这些长时间不使用的附件了: > SELECT * FROM tb_attachment WHERE topicId = -1 AND NOW() - uploadDate > xxxxx(自定义超时删除时间) 最后就是删除磁盘文件以及数据库记录了。 标签: 无