当前位置:
文档之家› 第八章:struts2文件上传下载
第八章:struts2文件上传下载
上传Action类UploadAction
package com.action; import java.io.*; import java.util.Date; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private static final int BUFFER_SIZE = 16 * 1024000 ; private File myFile; private String contentType; private String fileName; private String imageFileName; private String caption; 省略setter and getter…… }
错误处理பைடு நூலகம்
上面的出错提示是Struts 2默认的,大多数情况下,我们都需要自定义和国 际化这些信息。通过在全局的国际资源文件中加入 “struts.messages.error.content.type.not.allowed=上传文件类型不允许” ,可以实现以上提及的需求 还应该在UploadAction的return SUCCESS前加入: if(hasErrors()) return INPUT;
上传Action类UploadAction
private static String getExtention(String fileName) { int pos = stIndexOf("."); return fileName.substring(pos); } public String execute() { imageFileName = new Date().getTime() + getExtention(fileName); File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/upload") + "/" + imageFileName); copy(myFile, imageFile); return SUCCESS; } }
基于表单的文件上传
注意:上面是基于表单的上传,在form标签中有一个必须的属性值设置:enctype. 如果要做文件上传功能必须将enctype值设为multipart/form-data.
此外,文件上传还需要二个JAR文件支持:
文件上传页面upload.jsp
<%@ page contentType="text/html;charset=gb2312" %> <%@ taglib prefix="s" uri="/struts-tags" %> <body> <s:actionerror /> <s:form action="fileUpload" method="POST" enctype="multipart/formdata"> <s:file name="myFile" label="上传图片" /> <s:textfield name="caption" label="图片标题" /> <s:submit value="提交" /> </s:form> </body>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name ="file" extends ="struts-default"> <action name ="fileUpload" class ="com.action.UploadAction"> <result name="success" >/success.jsp</result> <result name="input">/upload.jsp</result> </action> </package> </struts>
两个上传框架
Common-FileUplaod:apache的开源项目,由jakarta项目组开发。 功能强大,简单易用,可以实现一次上传一个或多个文件,并可限制文件大小。 COS:O„Reilly公司开发的开源框架 会不定期的增加一些新功能。
下载Common-FileUplaod框架
使用数组同时上传多个文件
使用数组同时上传多个文件
使用数组同时上传多个文件
使用数组同时上传多个文件
使用数组同时上传多个文件
使用list同时上传多个文件
使用list同时上传多个文件
使用list同时上传多个文件
使用list同时上传多个文件
使用list同时上传多个文件
文件下载
有的同学可能会想,我只要设置一个超链接,不就可以下载文件了吗?确实如此,但是通过 超链接下载文件,暴露了下载文件的真实地址,不利于对资源进行安全保护;而且利用超链 接下载文件,服务器端的文件只能存放在Web应用程序所在的目录下。 利用程序编码实现下载,可以增加安全访问控制,对经过授权认证的用户提供下载,还可以 任意提供下载的数据,我们可以将文件放到Web应用程序以外的目录中,也可以将文件保存 到数据库中。 利用程序下载也非常简单,只需要按照如下的方式设置三个报头域就可以了: Content-Type:application/x-msdownload Content-Disposition:attachment;filename=downloadfile Content-Length:filesize 浏览器在接收到上述的报头信息后, 就会弹出文件下载对话框,让你将文件保存到本地硬盘 。
第八章:Struts 2文件上传下载
房栋
本章内容
Struts2单文件上传 Struts2多文件上传 Struts2文件下载
表单enctype属性
application/x-www-form-urlencoded: 默认值,只要是能输出网页的服务器端环境都可以 multipart/form-data: 上传二进制数据,只有使用multipart/form-data ,才能完整的传递文件数 据,进行上传操作
上传Action类UploadAction
private static void copy(File src, File dst) { try { InputStream in = null ; OutputStream out = null ; try { in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE); byte [] buffer = new byte [BUFFER_SIZE]; while (in.read(buffer) > 0 ) { out.write(buffer); } } finally { if ( null != in) { in.close(); } if ( null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } }
在运行上述例子,如果您留心一点的话,应该会发现服务器控制台有如下 输出: Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.dispatcher.Dispatcher getSaveDir INFO: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.interceptor.FileUploadInterceptor intercept INFO: Removing file myFile C:\Program Files\Tomcat 5.5 \work\Catalina\localhost\Struts2_Fileupload\upload_251447c2_1116e355 841__7ff7_00000006.tmp 服务器控制台输出 上述信息告诉我们,struts.multipart.saveDir没有配置。 struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在 struts.properties文件中。例如,如果在struts.properties文件加入如下代码 : struts.multipart.saveDir = tmp 如果此文件夹不存在,Struts 2会自动创建一个。