感谢itcast发布的免费视频
03文件上传组件的实现原理与应用分析
表单里面每一个元素对应一个FileItem,FileItem.isFileField来判断是否为文件
parseRequest(request)返回结果是FileItem的List
04用struts获取上传文件名和解决中文乱码
用filter来调用request.getCharacterEncoding(“UTF-8”)
javax.servlet.Filter接口
<filter>
<filter-name>xxx</filter-name>
<filter-class>cccc</filter-class>
</filter>
<filter-mapping>
<filter-name>xxx</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
05保存用struts获取的上传文件内容
getFileData方法会导致stack overflow异常
应该用getInputStream()获得InputStream
request.getRealPath(“/”);
or
this.getServlet().getServletContext().getRealPath(“/”);
创建File对象和FileOutputSteam对象
int len = 0;
byte[] buf = new byte[1024];
while ((len = contentStream.read(buf)) != -1 )
{
fos.write(buf, 0, len);
}
close资源
06分析上传时的一个安全问题
上传jsp容易有问题
07分析高质量项目如何处理文件上传
限定文件上传名称或将文件保存到无法直接访问到的目录中,文件名称用UUID生成,将文件打散到不同的目录中进行存储,这样会加速文件检索速度
08处理不上传文件时的情况
FormFile的getFileName为空串,FileSize为0
可以用eclipse的抽取方法的工具来抽取方法
09在配置文件中配置上传文件的存储目录
配置文件中的斜杠是两个
Properties config = new Properties();
FileINputStream fis = new FIleInputStream(configPath);
Config.load(fis);
saveDir = config.getProperty(“saveDir”);
10防止上传文件的名称冲突与综合测试
UUID uuid = UUID.randomUUID();
Uuid.toString();
11限制文件上传达小与演示超限后的问题
<Controller processClass=”” maxFileSize=”2M”>
</Controller>
12深入分析上传文件超限后的问题原因
Action对request的处理
当再文件上传时也想使用request.getParameter时,可以在filter里面对request进行包装
调用上传组件得到所有参数
将参数保存进map中
对外提供的getParameter方法从map中获取参数
原理:
原始request经过ActionServlet包装变成包装request,在按照ActionForward处理后变回原始request返回给Action(实验结果是包装request)
一旦文件超过最大限度,request取参数就会失效
13上传文件超限后的编程处理
14多个文件上传的问题及论坛项目的评比
定义一个数组,类型为FormFile类型
15修正从配置文件中读取文件存储目录的缺陷
从类加载目录下读取