我主要使用的DiskFileUpload类和FileItem接口。其它类和接口还很少使用。
DiskFileUpload的实例upload,然后设置内存使用大小、上传文件的限制大小以及缓冲硬盘区域。我主要作图片的上传,所以,缓冲硬盘区域的设置不是太重要。但是另外两个设置就一定要注意,要不然恶意上传会让系统崩掉地!
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeTheshold(MemorySize);
upload.setSizeMax(FileSize);
upload.setRepositoryPath(TempDirectory);
说明一下,我这里知道表单提交中一定有file控件,所以就省去了判断是否有file提交的那一步。当然,那个判断方法已经在用户指南里说的很清楚了。
下面就要开始接受表单的工作了。通过编译或者说解译request,来获得表单提交项。然后判断表单项是否是普通项。如果是,那就简单啦,只要获得字段名和字段值就搞定;如果不是,那我们的工作就真的要开始了,获得文件后缀,定义文件名,向服务器写文件。当然这里可以使用文件在客户端的名字,不过我觉得这样不太安全,谁要是传了一段恶意代码上来,至少应该让他没那么容易找到嘛,呵呵!
//获得文件后缀
String fullPath = item.getName();
int dotIndex = fullPath.indexOf(".");
String fileType = full.Path.substring(dotIndex);
//定义文件名
//这里采用根据时间随机生成
String fileName = String.valueOf(new java.util.Date().getTime()) + fileType;
//下面就是按照指南写啦~
...
当然我还没有做更细致的判断,下一步应该把能够上传的文件类型的contextType都获得以后,就可以判断哪些类型可以上传了。
今天遇到一个还没有解决的问题,就是我把MemorySize、FileSize、SavePath、TempDirectory记录在.properties文件里,路径都可以正确存取,但是两个数字却无法正常从String转换到int,郁闷。。。我还要在去了解一着方面的东西。下次把补充的内容和这个问题解决的方法一起帖上来。OHOH~今天就到这里吧!