HTTP POST的文件上传问题
要从M$的破烂文件共享协议说起,众所周知,即使两台运行WINDOWS的机器同处于一个局域网和网段内,设置了完全共享,也不一定能访问已经共享了的文件(包括直接使用IP地址访问也不行),这对开发者需要传递文件造成了许多困扰和麻烦。于是通过Google找到了一个叫做Browser.jsp的程序,它在一个文件里集成了几乎绝大部分文件管理器的功能,甚至包括Exec。运行截图:
http://blog.csdn.net/images/blog_csdn_net/wolfsquare/16699/r_Browser.jsp.gif
虽然是jsp的,但对每人至少有一个WEB服务器在运行的J2EE开发者来说只是一个不是问题的问题,通过访问该页面就可以使用WEB方式下载文件,在也没有WINDOWS经常找不到计算机的烦恼了。
然而实际运用中发现,该程序不支持中文目录,这真是一个打击,仔细查看代码发现原来又是编码问题在作怪,身为开发者只好操起修改大法改了。用了一段时间后效果不错,只是遇到大文件下载中断无法断点续传,不过这个问题不是很重要,瑕不掩玉嘛。在一次假公济私的行动中,突然要利用它的文件上传功能,却发现该功能实际上无法成功上传文件,不论大小。但是令人郁闷的是该功能在Tomcat中却是运作正常,这下迷糊了,难道是我们用的Aupsic服务器问题?鉴于无法更换服务器的现实,只好又操起修改大刀,深入探索了一下HTTP POST的文件的处理过程,问题原来是Browser.jsp判断段分隔标志时,从ContenType里取到了该标志,但是在Apusic中运行时取不到该标志,参照SmartUpload,使用在上传输入流中获取并处理段分隔标志后一切正常。不过同时也发现了SmartUpload上传文件时,无论文件多大,一下子就从内存中分配了同样大小的字节数组缓冲...这真不是一个好习惯。
最后要注意,该程序功能过于强大对于系统安全有严重威胁,最好还是给它加上一点限制。
修改过的文件附后Browser.jsp