多文件上传的若干问题

时间:2021-03-21 06:53:07

昨天研究了如何多个文件上传的问题。之前弄了一个单文件上传的,挺简单,因特网上到处都是现成的代码,以为多文件也不会太难,结果到弄的时候才发现,远没有想象中那么简单。

网络上有一篇被转的比较多的使用FileUpload上传多文件的方法(实在不知道是谁的原创,转得到处都是,也不写是转帖还是原创,版权问题真的伤脑筋),它一开始在页面上有5个FileUpload,如果需要更多的,它提供一个TextBox来让用户输入要增加的FileUpload的数目,然后点增加按钮,程序会自动在原来的5个FileUpload后增加相应数目的FileUpload。一开始我觉得这个不错,想照着弄一个自己的,只是不要TextBox,点一下增加按钮就增加一个FileUpload,再点一下再增加一个。做的时候发现,根本做不到,点第一次的时候增加了一个,点第二次及n次后,还是只增加了一个。原因是动态增加的控件在POST后,ASP.NET是不保留动态增加的控件的。此做法还有一个问题是,如果用户在开始时选了几个文件,发现文件太多,还要加几个FileUpload,那么之前选的文件需要重新选一遍,这是极差的用户体验。

因特网上另一篇文章用的是一个FileUpload,有加入按钮,然后把文件名加到一个List中,然后有一个上传按钮给用户上传所有文件,此法我觉得不好,再加上是英文的,故没仔细看。

还有另外一个做法,也是英文的,是他自己制作的控件,文章太长,也没看。

最后找到一篇叫郑子琏的*人的,她可能是*微软的支持工程师,她在自己的个人空间中提到了自己的做法,没有详述,但在*微软的论坛上贴了她自己的代码。她用的是客户端的实现方法,在客户端用vbscript来动态的增加input type=file的html控件来实现的,我觉得不错。尝试了一下,真的不错。初始时只有一个可选的,每选了一个就自动添加一个空白的文件选择控件,真的好用。但也有问题,vbscript和页面中的javascript有冲突,对于既不懂vbscript,又不懂javascript的我来说,解决问题真的不容易,看来至少要好好学学javascript。其次,最好上传页面中不要有其它数据录入控件会提交页面的,如果有,在选了文件之后,如果用户在其它的数据录入控件中做了操作而导致提交的话,那就白选了。还有一个问题是我的页面中还有其他的TextBox,我屏蔽了回车,这样如果在文件选择的TextBox中按了回车的话会导致javascipt出错(安全问题),为此我又花了不少时间,还是得好好学学javascript。