用户上传产生无效文件的解决思路
2005-07-18 16:03
281 查看
在编写用户文件上传功能的时候,通常都是在form表单中设置一个隐藏的input控件,并使用iframe嵌套一个用于上传控制的文件,由用户输入本地文件,然后执行上传程序,完毕之后把文件的名称通过客户端脚本传递给父页面的隐藏input。在用户输入完其它信息后提交表单,系统就会把表单数据(包括input的值,即用户上传的文件名)一起写入到数据库中。但这种方式会带来一个问题:用户完成文件上传之后又没有提交表单,以至于上传的文件信息没有写入到数据库中,这样上传的文件就会变成废文件。另外,如果我们没有对用户在上传文件之后按回退键或者刷新页面等这些不正常的操作加以很好限制的话,那么废文件的生成就是不可避免的。
那么,如何才能比较好地解决这个问题呢?狂人参考了网上的一些资料,经过实践之后,总结了一条设计思路,仅供参考,也欢迎指正,以便改进。
其实思路很简单,主要是受到了中转站的启发。在用户执行文件上传操作的时候,事实上是执行了以下的步骤:
1、获取用户的Session.SessionID值或用户帐号,并以该值作为文件夹名,使用FSO对象新建一个临时性质的文件夹。
2、将用户文件上传至该文件夹中,并把文件名作为返回值赋予表单的隐藏input。如果用户在此期间执行了不正常的操作(如后退,刷新页面等),则所有的文件都将上传到该临时目录中,且返回给表单隐藏input的值只为最后一次上传的文件名。
3、用户在填写完表单的信息后提交,将信息写入数据库,并从隐藏input中获取文件名,使用FSO对象把该文件从临时文件夹复制(或移动)至目标文件夹,完成后将临时文件夹删除。
至此,整个操作完成。上述的算法,可以大大地减少废文件的生成,不足之处是对于用户上传文件后又没有提交表单的个例,则无法删除其临时文件夹,所以仍然需要系统管理员不定期地手工清理。
对于该算法的源代码,待狂人调试完成后会向大家公布,敬请关注。
那么,如何才能比较好地解决这个问题呢?狂人参考了网上的一些资料,经过实践之后,总结了一条设计思路,仅供参考,也欢迎指正,以便改进。
其实思路很简单,主要是受到了中转站的启发。在用户执行文件上传操作的时候,事实上是执行了以下的步骤:
1、获取用户的Session.SessionID值或用户帐号,并以该值作为文件夹名,使用FSO对象新建一个临时性质的文件夹。
2、将用户文件上传至该文件夹中,并把文件名作为返回值赋予表单的隐藏input。如果用户在此期间执行了不正常的操作(如后退,刷新页面等),则所有的文件都将上传到该临时目录中,且返回给表单隐藏input的值只为最后一次上传的文件名。
3、用户在填写完表单的信息后提交,将信息写入数据库,并从隐藏input中获取文件名,使用FSO对象把该文件从临时文件夹复制(或移动)至目标文件夹,完成后将临时文件夹删除。
至此,整个操作完成。上述的算法,可以大大地减少废文件的生成,不足之处是对于用户上传文件后又没有提交表单的个例,则无法删除其临时文件夹,所以仍然需要系统管理员不定期地手工清理。
对于该算法的源代码,待狂人调试完成后会向大家公布,敬请关注。
相关文章推荐
- 防止用户上传产生无效文件源码
- vsftp虚拟用户无法上传文件,解决办法
- SELinux限制导致VSFTP匿名用户不能上传文件问题解决方法
- asp.net下CKFinder IE9以下浏览器中上传图片文件时提示“无效文件名或文件夹名称”的解决方法
- Rop 文件上传解决思路
- asp.net下CKFinder IE浏览器中上传图片文件时提示“无效文件名或文件夹名称”的解决方法(原创文章)
- 解决微信内嵌浏览器无法响应<input type='file'>上传文件的思路
- winscp普通用户上传文件没有权限解决
- android webview图片文件上传兼容性问题——上传控件点击无效的解决办法
- Laravel中使用uploadify 上传文件返回出现debugbar信息解决思路
- .NET下fckeditor动态设置文件上传路径,解决多用户多路径的问题。
- android学习笔记---32_文件断点上传器,解决多用户并发,以及自定义协议,注意协议中的漏洞
- IE8在上传文件时路径无效或无效的图片文件解决办法【转】
- 解决Spring Boot中Multipartfile上传文件路径无效
- 解决微信内嵌浏览器无法响应<input type='file'>上传文件的思路
- android webview图片文件上传——上传控件点击无效的解决办法
- php5.6之后的版本使用curl以@+文件名的方式上传文件无效的解决版本
- 解决php上传文件过程中Warning move_uploaded_file, failed to open stream的一种思路
- vsftpd 本地用户无法上传文件解决方法