boolean isMultipart = FileUpload.isMultipartContent(request);
DiskFileUpload upload = new DiskFileUpload();
//设置上传参数
upload.setSizeThrehold(最大内存大小);
upload.setSizeMax(最大请求大小);
upload.setRepositoryPath(临时目录);
//解析请求
List /* FileItem */ items = upload.parseRequest(request);
内存大小, 允许上传的最大文件, 临时目录);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
...
}
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
...
}
if (writeToFile) {
File uploadedFile = new File(...);
item.write(uploadedFile);
} else {
InputStream uploadedStream = item.getInputStream();
...
uploadedStream.close();
}
byte[] data = item.get();
...
当web容 器在运行时,而杀毒软件又同时运行在同样的系统上,这种情况下在应用中使用FileUpload容易导致一些很难预料的事情.这部分将描述一些你可能要遇 到的情况,我们会提供一些方法来处理它们。默认的FileUpload实现将会使超过它在内存中大小的上传的选项写入到磁盘。而当这样的文件关闭后,任何 系统中的杀毒软件都会被唤醒,然后去检查它,然后会潜在地隔离这个文件--就是说,将它移动到一个不产生问题的特定地方。这样一来,对开发者来说当然是一 个意外,因为刚刚上传的文件将不能被处理了。从另一方面来说,小于设定的内存大小的那些上传的文件将被保持在内存中,这样一来,将不会被杀毒软件所检测 到,这样就有可能使病毒以某种方式驻留在了系统中了(虽然如果一旦它被写入到磁盘,杀毒软件就会定位并检测到它)。一个通用的解决方法是在系统中专门设置 一个目录来存放这些上传的文件,然后配置杀毒软件忽略这个目录。这样将确保上传的文件在系统中不被隔离,但是这样就把扫描病毒的责任交给了应用程序的开发 者了。扫描这些上传的文件的任务可以在外部的处理中实现。这样可以将干净的文件移动到一个“改进”过的地方,或者也可以把杀毒集成到应用中去。