上传问题,如何在用户没有保存时删除已上传文件

skyandcode 2015-01-20 04:01:15
实际情况是:
有一个web页面,用户可以新建教程. 这个过程中用户可以上传相关的图片和文件,当用户点保存时,将文件路径写入数据库。
问题是:
如果用户一直上传,但最后却不点击保存,如何处理那些已上传的文件?(特别情况是用户打开了很多个页面,上传后都不保存)

请各位发表意见...
...全文
1625 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyandcode 2015-02-06
  • 打赏
  • 举报
回复
关于这个问题,像sp1234说的,暂存2个小时,没保存就删除。 这个想法是很好的,只是,怎么计时呢?而且,还有服务器重启等问题。 现在我的想法是,存储一个标记在cookie,通过检查这个cookie是否需要去清理个人临时文件。
skyandcode 2015-02-06
  • 打赏
  • 举报
回复
定时任务会有问题的。见上。
skyandcode 2015-02-06
  • 打赏
  • 举报
回复
引用 45 楼 Z65443344 的回复:
遍历判断每个文件的创建时间效率太低了吧 其实那个bug很好解决啊,就是今天不要删除昨天的,而是删除前天的,永远保留2天的文件夹,不就得了 另外就是临时文件夹路径要保存在session里,不要上传文件上传到1号的文件夹,等保存的时候又去从2号的文件夹里取,那就出错了
好久没来csdn了。 这个想法是很不错。只不过还是有点问题。 如果在web app里实现,那么定时任务可以用Timer, 但 Timer 会因为 iis 回收而被清掉。 除非麻烦点在部署一个windows service。
QQ234788028 2015-01-26
  • 打赏
  • 举报
回复
用户点上传后保存到/temp/ 用户点保存后把文件从/temp/移到正式路径 临时文件删除的问题,可以在Global写个定时任务去执行
於黾 2015-01-26
  • 打赏
  • 举报
回复
遍历判断每个文件的创建时间效率太低了吧 其实那个bug很好解决啊,就是今天不要删除昨天的,而是删除前天的,永远保留2天的文件夹,不就得了 另外就是临时文件夹路径要保存在session里,不要上传文件上传到1号的文件夹,等保存的时候又去从2号的文件夹里取,那就出错了
webdiyer 2015-01-26
  • 打赏
  • 举报
回复
引用 39 楼 skyandcode 的回复:
[quote=引用 37 楼 webdiyer 的回复:] [quote=引用 36 楼 skyandcode 的回复:] [quote=引用 33 楼 Z65443344 的回复:] 这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
感谢所有朋友的回答。 采用了这位朋友的建议。[/quote] 这个方法有个bug,如果当前时间是23:59分,一个用户上传了文件还没保存,24点之后就是第二天了,此时另一个用户开始上传,按楼上的方法就会把昨天的临时文件夹删除,也就是前一个用户一分钟前上传的文件全被删除了,而他还没来得及保存呢[/quote] 嗯,的确是会出现这种情况。 我是想设定一个特殊的时间,例如 05:00:00 保证这种概率尽可能低。 像你上面的说法,是需要去数据库查询,我这边尽量不改表结构。 而且,用户如果打开多个页面同时在上传呢? 你觉得呢?[/quote] 不修改数据库表结构也可以,文件的上传时间即创建时间可以直接从文件信息中获取,如创建时间早于多少小时就删除,否则不删除
skyandcode 2015-01-25
  • 打赏
  • 举报
回复
引用 41 楼 laohu_laohu 的回复:
删除已经上传到数据库和文件夹中的图片文件 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string sqlVideoPicture = "select Images from tb_HuenLian where HenuID=" + gvBlog.DataKeys[e.RowIndex].Value.ToString(); //删除指定路径下的图片 File.Delete(Server.MapPath("../") + operateData.getTier(sqlVideoPicture)); SqlData da = new SqlData(); da.ExceSQL("delete from tb_HuenLian where HenuID='" + gvBlog.DataKeys[e.RowIndex].Value + "'");//删除数据表中的图片地址 da.ExceSQL("delete from tb_huen_lian where hID='" + gvBlog.DataKeys[e.RowIndex].Value + "'");//删除数据表中的图片地址 Response.Redirect("UserManage.aspx"); }//codego.net/15/1/1/ //询问对话框提示 protected void gvBlog_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { ((LinkButton)(e.Row.Cells[5].Controls[0])).Attributes.Add("onclick", "return confirm('确定删除吗?')"); } }
看题。
laohu_laohu 2015-01-25
  • 打赏
  • 举报
回复
删除已经上传到数据库和文件夹中的图片文件 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string sqlVideoPicture = "select Images from tb_HuenLian where HenuID=" + gvBlog.DataKeys[e.RowIndex].Value.ToString(); //删除指定路径下的图片 File.Delete(Server.MapPath("../") + operateData.getTier(sqlVideoPicture)); SqlData da = new SqlData(); da.ExceSQL("delete from tb_HuenLian where HenuID='" + gvBlog.DataKeys[e.RowIndex].Value + "'");//删除数据表中的图片地址 da.ExceSQL("delete from tb_huen_lian where hID='" + gvBlog.DataKeys[e.RowIndex].Value + "'");//删除数据表中的图片地址 Response.Redirect("UserManage.aspx"); }//codego.net/15/1/1/ //询问对话框提示 protected void gvBlog_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { ((LinkButton)(e.Row.Cells[5].Controls[0])).Attributes.Add("onclick", "return confirm('确定删除吗?')"); } }
skyandcode 2015-01-25
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
既然“保存”时就是“将文件路径写入数据库”的动作,那么你其实本可以准确知道文件有没有保存。你只是要判断多长时间算是“超时未保存”就行了。 但是你后来纠结于“服务器程序不是自己可动手写的”、“不同上传时文件名会重复”的问题,那么你的其它干扰性的问题就“太多了”。你还是先搞明白哪一个先要在这个问题之前去搞明白吧,
请教sp1234, 如果为每个上传文件保存2个小时,那就要缓存这个文件路径,设定2小时后删除这个缓存,然后删除文件。也就是依赖缓存了。 这样会不会有效率问题?也就是说,如果有100个用户在这段时间内上传文件,那就要监视这100个路径了。 感谢你的回答。
skyandcode 2015-01-24
  • 打赏
  • 举报
回复
引用 38 楼 tongxuejie 的回复:
[quote=引用 37 楼 webdiyer 的回复:] [quote=引用 36 楼 skyandcode 的回复:] [quote=引用 33 楼 Z65443344 的回复:] 这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
感谢所有朋友的回答。 采用了这位朋友的建议。[/quote] 这个方法有个bug,如果当前时间是23:59分,一个用户上传了文件还没保存,24点之后就是第二天了,此时另一个用户开始上传,按楼上的方法就会把昨天的临时文件夹删除,也就是前一个用户一分钟前上传的文件全被删除了,而他还没来得及保存呢[/quote] 对的 不能用这种方式 如果你在CSDN编辑回帖后 没有点击“提交回复” 那么你退出后重新登录再打开该贴 就会发现刚刚编辑的内容还在 要么等用户自己删除 要么设计时间点 到点删除 (是删除临时文件) 或者弄个已/未上传标志 貌似要动动表字段 或者干脆按时间段来 过了时间都眉毛胡子一把删除临时文件 [/quote] 设计每日定时删除的确会有问题,只能说概率较小。 如果是定时删除,那可能要在服务器启动时,完全清理临时文件,不然用户上传过程,如果服务器重启了,就存在垃圾文件了。 如果是定时删除,是不是按以下的做法: 用户上传,缓存上传成功后的路径,这个缓存2小时后被移除。也就是依赖缓存了。 这样会不会有效率问题?
skyandcode 2015-01-24
  • 打赏
  • 举报
回复
引用 37 楼 webdiyer 的回复:
[quote=引用 36 楼 skyandcode 的回复:] [quote=引用 33 楼 Z65443344 的回复:] 这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
感谢所有朋友的回答。 采用了这位朋友的建议。[/quote] 这个方法有个bug,如果当前时间是23:59分,一个用户上传了文件还没保存,24点之后就是第二天了,此时另一个用户开始上传,按楼上的方法就会把昨天的临时文件夹删除,也就是前一个用户一分钟前上传的文件全被删除了,而他还没来得及保存呢[/quote] 嗯,的确是会出现这种情况。 我是想设定一个特殊的时间,例如 05:00:00 保证这种概率尽可能低。 像你上面的说法,是需要去数据库查询,我这边尽量不改表结构。 而且,用户如果打开多个页面同时在上传呢? 你觉得呢?
skyandcode 2015-01-23
  • 打赏
  • 举报
回复
引用 33 楼 Z65443344 的回复:
这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
感谢所有朋友的回答。 采用了这位朋友的建议。
「已注销」 2015-01-23
  • 打赏
  • 举报
回复
引用 37 楼 webdiyer 的回复:
[quote=引用 36 楼 skyandcode 的回复:] [quote=引用 33 楼 Z65443344 的回复:] 这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
感谢所有朋友的回答。 采用了这位朋友的建议。[/quote] 这个方法有个bug,如果当前时间是23:59分,一个用户上传了文件还没保存,24点之后就是第二天了,此时另一个用户开始上传,按楼上的方法就会把昨天的临时文件夹删除,也就是前一个用户一分钟前上传的文件全被删除了,而他还没来得及保存呢[/quote] 对的 不能用这种方式 如果你在CSDN编辑回帖后 没有点击“提交回复” 那么你退出后重新登录再打开该贴 就会发现刚刚编辑的内容还在 要么等用户自己删除 要么设计时间点 到点删除 (是删除临时文件) 或者弄个已/未上传标志 貌似要动动表字段 或者干脆按时间段来 过了时间都眉毛胡子一把删除临时文件
webdiyer 2015-01-23
  • 打赏
  • 举报
回复
引用 36 楼 skyandcode 的回复:
[quote=引用 33 楼 Z65443344 的回复:] 这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
感谢所有朋友的回答。 采用了这位朋友的建议。[/quote] 这个方法有个bug,如果当前时间是23:59分,一个用户上传了文件还没保存,24点之后就是第二天了,此时另一个用户开始上传,按楼上的方法就会把昨天的临时文件夹删除,也就是前一个用户一分钟前上传的文件全被删除了,而他还没来得及保存呢
skyandcode 2015-01-22
  • 打赏
  • 举报
回复
引用 26 楼 xhbmj 的回复:
比较赞同sp1234的说法,设定一个时间,规定时间内未完成保存会被清理掉。 在此,建议你再做一个手工清理文件的功能,查询和数据库中没有关联的文件列表或文件夹,在web上做删除。
嗯。 觉不觉得在登录时做清理是更好的选择? 设定时清理还是可能存在垃圾文件,例如,服务器重启了,缓存失效了等等。
skyandcode 2015-01-22
  • 打赏
  • 举报
回复
引用 24 楼 FoxDave 的回复:
[quote=引用 18 楼 skyandcode 的回复:] [quote=引用 13 楼 FoxDave 的回复:] 当然是你是否保存操作的最后啊。。。
如果用户没保存呢[/quote] 没保存指什么?直接把浏览器关掉吗?[/quote] 是的。
bakdfkuk 2015-01-22
  • 打赏
  • 举报
回复
忘记了说,如果你需要定时删除程序,这里有个类可以方便实现定时启动操作http://www.wuyinweb.com/doc/52/23.aspx
bakdfkuk 2015-01-22
  • 打赏
  • 举报
回复
文件先上传到一个临时文件夹中,定时删除临时文件夹,如果保存,则复制文件并删除文件,就解决了因关闭浏览器不保存的问题
於黾 2015-01-22
  • 打赏
  • 举报
回复
这种临时文件夹,你完全可以每天生成一个,而不是所有临时文件都放到同一个文件夹里去 至于什么时候生成,你可以让网站定时每天0点生成,也可以等每天第一个用户登陆的时候生成 然后生成的同时就删除前一天的文件夹
huaneramn 2015-01-22
  • 打赏
  • 举报
回复
手动删除。。。。。。。。。。。。。。。。。。。。。。
加载更多回复(28)

62,234

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧