1、第六章 Strut2的文件上传和下载,本章主要内容,6.1 Struts2的文件上传和下载6.2 文件上传下载样例,本章代码的图解,6.1 Struts2的文件上传和下载,Struts2框架中默认使用了apache jakarta的Common-fileUpload组件,该组件将解析出HttpServletRequest中的文件域信息,并将使用IO数据流的方式,将文件保存在指定位置,完成文件的上传。文件下载过程主要就是直接往HttpServletResponse的输出流进行流操作就行了。注意 使用Common-fileUpload组件,还需要apache jakarta的另外一个开源项目Com
2、mons-IO。所以为了使用Struts2环境下的文件上传,我们在项目中不仅需要添加Struts2支持的jar包,还需要commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar这两个jar包。,6.2 文件上传下载样例,新建一个Tomcat Project工程sshsample6,并添加Struts2支持和commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar这个两个jar包。 新建一个文件上传的jsp和一个文件下载文件,放在WEB-INF/jsp下。 fileLoader.jsp主要代码如下:,详细代码参看
3、 教材6.2节相关代码,6.2 文件上传下载样例,fileGet.jsp 主要代码如下:该JSP中,form标签的enctype属性设置为multipart/form-data。这表明这个表单会以二进制流的形式来处理表单数据,文件上传需要使用该编码方式。,6.2 文件上传下载样例,新建文件上传和下载的Action类FileLoaderAction主要代码如下:以上代码是取得运行时服务器目录,6.2 文件上传下载样例,以下是FileLoaderAction的download函数的关键代码片段:,6.2 文件上传下载样例,以下是FileLoaderAction的save函数的关键代码片段:,6.2
4、 文件上传下载样例,以下是FileLoaderAction的mkdir函数的关键代码片段:,6.2 文件上传下载样例,注意:这些方法的命名都是跟fileLoader.jsp中file标签中的name属性为“photoFile”,紧密关联的。如果fileLoader.jsp中file标签中的name属性更改成“otherFile”,那么上述的方法名称全部要更改成getOtherFile,setOtherFile等。,6.2 文件上传下载样例,文件下载的实现的关键在于设置HttpServletResponse的头信息,就是FileLoaderAction类的这行代码:ServletActionCo
5、ntext.getResponse().setHeader(“Content-disposition“, “attachment;filename=“ + URLEncoder.encode(path, “utf-8“); 这段代码的含义就是告诉浏览器返回的内容是一个文件。这样浏览器就会提示用户保存文件。,6.2 文件上传下载样例,以下是struts.xml关键代码片段,6.2 文件上传下载样例,以下是web.xml关键代码片段,6.2 文件上传下载样例,工程发布后,访问http:/localhost:8080/sshsample6/fileLoader.action,返回页面如下图所示:,6.2 文件上传下载样例,点击浏览按钮,选择一个图片文件上载,如图所示:,6.2 文件上传下载样例,选择一个文件点击打开,页面会如下所示:,6.2 文件上传下载样例,点击确认,图片会上载到server,会保存在WebRoot/UploadImages下。然后页面会转向到文件下载页面,此页面也同时显示你刚刚上载的图片文件。如下图所示:,6.2 文件上传下载样例,点击下载按钮,将弹出文件保存的对话框,如图所示:,