文件上传,有两种方式,一种是自己解析文件流,一种是借助struct2中自带的拦截器对文件进行解析
自己解析流文件:利用 commons-io-1.4.jar和commons-fileupload-1.2.1.jar来进行解析,相关的事项如下:
1.浏览器端注意事项
1.请求方式必须是 post
2.需要使用组件<inputtype="file" name="f"> 组件必须有名称
3.表单必须设置encType="multipart/form-data"
2.服务器端处理
通过request对象,获取InputStream,可以将浏览器提交的所有数据读取到.
3.入门案例分析
在浏览器端创建一个可以上传文件的表单,在服务器端通过commons-fileupload完成文件上传。
浏览器端注意三件事情:
1.表单的method=post
2.设置encType=multipart/form-date
3.使用具甩name属性的file元素
在服务器端
1.创建DiskFileItemFactory
2.创建ServletFileUpload
3.通过ServletFileUpload的parseRequest方法得到所有的FileItem
struct2中自带的拦截器对文件进行解析:
这个原理同上,只是不可以用上述的 ServletFileUpload来获取FileItem ,因为struts2自2.0以后的版本,会拦截文件流,所以无法使用该方法来进行文件上传,必须使用struts2中自带的方法对文件进行读取,这也是这一次文件上传案例中的bug.