用户发表一篇文章,插入图片之前先上传图片到了服务器,但他并未发布就把网页关掉了,怎么处理?

2014-04-26 19:17:03 +08:00
 vvniu
目前的思路是每上传一张图片就在数据库里建立一个一数据,加一个字段0,当发表时正则过滤所有文章里的图片然后改写数据库里相应图片的字段为1,然后在夜深人静没人上网的时候刷新一遍数据库把所有字段为0的都给清空了。但是自己觉得是一个好不靠谱的方法啊。。。。any idea?
7937 次点击
所在节点    程序员
36 条回复
cevincheung
2014-04-26 19:18:49 +08:00
discuz是这么干的:

在你下次发帖的时候,提示有未使用的附件,要求你处理并且必须处理。否则无法发帖。如果本次还是没使用,ok,下次还接着提示。
jsonline
2014-04-26 19:47:15 +08:00
最好不清空
bearcat001
2014-04-26 19:53:25 +08:00
看看这种思路行不?

上传后的图片在tmp目录中,确定文章提交了才把它移动到可用的位置,否则等系统自动清空
如果想要图片上传后预览,也可以弄一个链接地址用来显示图片,后端将其转换到临时目录中
ericls
2014-04-26 19:56:38 +08:00
楼主问出了困扰我多时的问题。。 谢谢楼主和楼上各位
leafgray
2014-04-26 19:57:15 +08:00
上传临时目录,保存时再移动到正式使用的目录。定时清临时目录。
====
或者插入时都先不上传,保存时再上传----这个没有FileApi的话,可能就得控件了。。

一楼方法好像挺靠谱的。
imganquan
2014-04-26 19:59:16 +08:00
我这里也是先进入tmp目录,再移动到业务数据目录。
yakczh
2014-04-26 20:17:47 +08:00
把图片删了就没事了
julyclyde
2014-04-26 20:51:20 +08:00
weibo.COM解决这个问题的方案是:上传到图床,那是由另一个部门管理的

另外weibo.COM的发言条目删除后,其附件图不删除
vvniu
2014-04-26 21:39:46 +08:00
@cevincheung 好办法,但是不怎么人性化,但是又感觉最有效
@bearcat001 @leafgray @imganquan 原来我也是这么想的,其实和我的设想大概都一个意思,但是要是一直都有人在发贴,怎么定时清理?然后在给图片加个时间字段?我觉得结合一楼的办法最好
@ericls 有什么问题大家分享呗
@julyclyde 那越堆越多咋办
raincious
2014-04-26 21:48:21 +08:00
(对高质量的网站来说)用户上传的任何东西都是有价值的,所以留着也无所谓。我个人是留着的(有一定怕麻烦的成分)

就楼主的要求来说,附件不应该在发帖前上传才是,可以利用FLASH或者HTML5(不知道可不可以)先显示一个缩略图,用户发布内容的时候,服务器一并处理附件。
ksc010
2014-04-26 22:12:05 +08:00
可能楼主觉得这样浪费存储空间什么的
我觉得这种情况下
可以不用管他上传了图片有没有使用
只要保证不重复上传就ok了 (存储时候每个资源的唯一性)
lincanbin
2014-04-26 22:15:31 +08:00
上传时即将附件信息存进数据库,定时清理路径未在任何帖子中出现过的附件
另外附件数据表还要保存filesize和md5
防止重复上传
julyclyde
2014-04-26 22:33:08 +08:00
@vvniu 越堆越多那也是别的部门的事啊,weibo公司就是这么想滴。嘿嘿嘿……
gfreezy
2014-04-26 23:09:18 +08:00
就这么丢着好了,实际环境中这种无效的图片比例很小。删除图片获得的好处(一点点的硬盘空间)远远比不上给系统增加的复杂性。
odirus
2014-04-26 23:38:40 +08:00
用户上传的数据很珍贵,应当重视。用户上传图片后服务器端“顺便”记录文件的MD5值,记录到缓存中,下次上传图片的时候再“顺便”计算一下MD5,如果发现命中缓存,说明文件已经存在,并检索出文件名。有些情况下特别有用,比如很多公司还没有自己的图床,也许会使用第三方的存储,针对热门的文件(比如豆瓣东西,会有很多重复的图片),可以减少很大的压力。
vvniu
2014-04-26 23:44:58 +08:00
@raincious 用的是所见即得的编辑器,所以得之前就上传,不上传做缩略图感觉更麻烦

@gfreezy @ksc010 确实如此,但是清了心里书胡也算是好处吧~

@lincanbin 防止重复上传我倒觉得没什么意义,只要不用就清空就是了
vvniu
2014-04-26 23:48:39 +08:00
@odirus @raincious 但是每次要用md5查找一遍所有的文件的md5开销很大吧,相比之下还是浪费些储存空间来得好
raincious
2014-04-26 23:49:21 +08:00
@vvniu HTML5或者Flash就没什么问题。但是你得考虑自己写个WYSIWYG编辑器了。
raincious
2014-04-26 23:56:20 +08:00
@vvniu 我的方式是将某一段时间内的文件用一个文件名存在FTP的同一个目录下(是的,用户将文件上传到应用程序服务器之后,服务器会将它处理好之后传到FTP上),比如这周上传的文件,这周内就不能传第二个一样的了(FTP操作的时候会跳过重复的文件)。

另外你可以实现一个统一的操作类来进行附件上传管理,比如每当用户上传一个文件之后,就将文件算好MD5,然后加到数据库中,如果之后又有一个一样的文件进来,直接拷贝数据库中的row然后改掉PK和上传者存回去就好了;而如果这是第一个出现在网站中的文件,就执行储存操作。

另外个人觉得,如果你的网站是公共形式的,没有私密的内容(比如个人隐私相册),没必要区分用户的附件空间。就像V2EX一样,你发表的所有内容都不属于你了。
vvniu
2014-04-26 23:56:33 +08:00
@raincious 就是因为写不出来。。。所以只能按照现有的来做,而目前只找到先上传的方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/110161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX