现在的位置: 首页 > 综合 > 正文

itcast张孝祥struts文件上传单元笔记

2012年05月28日 ⁄ 综合 ⁄ 共 1561字 ⁄ 字号 评论关闭

感谢itcast发布的免费视频


03文件上传组件的实现原理与应用分析

表单里面每一个元素对应一个FileItem,FileItem.isFileField来判断是否为文件

parseRequest(request)返回结果是FileItemList

 

04struts获取上传文件名和解决中文乱码

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处理不上传文件时的情况

FormFilegetFileName为空串,FileSize0

可以用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深入分析上传文件超限后的问题原因

Actionrequest的处理

当再文件上传时也想使用request.getParameter时,可以在filter里面对request进行包装

调用上传组件得到所有参数

将参数保存进map

对外提供的getParameter方法从map中获取参数

 

原理:

原始request经过ActionServlet包装变成包装request,在按照ActionForward处理后变回原始request返回给Action(实验结果是包装request)

 

一旦文件超过最大限度,request取参数就会失效

 

13上传文件超限后的编程处理

14多个文件上传的问题及论坛项目的评比

 

定义一个数组,类型为FormFile类型

15修正从配置文件中读取文件存储目录的缺陷

从类加载目录下读取

抱歉!评论已关闭.