1.文件上传介绍
浏览器端注意事项:
表单提交方式method=post
表单中必须有一个组件
表单中必须设置enctype=”multipart/form-data”
服务器端
Commons-fileupoad.jar包完成。
Struts2框架本身支持文件上传
Struts2框架使用一个fileupload的interceptor来完成文件上传,而我们要使用它
在action中我们可以提供类似以下的操作就能完成文件上传操作
private File upload;
private String uploadContextType;
private String uploadFileName;
在execute方法中将文件copy就可以完成文件上传。
2.文件上传快速入门
2.1创建一个upload.jsp页面
<body>
<form action="${pageContext.request.contextPath }/up" method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<input type="file" name="upload">
<input type="submit" name="上传">
</form>
</body>
2.2创建action
<action name="up" class="Action.UploadAction" method="uploadFile">
<!-- 配置input视图,显示错误信息 -->
<result name="input">/error.jsp</result>
</action>
2.3 UploadAction
private File upload;
private String uploadContextType;
private String uploadFileName;
......
//get/set方法
......
public void uploadFile() {
// 得到upload目录在tomcat的绝对磁盘路径
String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
//创建一个服务端文件
File dest = new File(realPath,uploadFileName);
try {
//文件上传操作
FileUtils.copyFile(upload, dest);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.3 上传多个文件
//上传多个文件,采用数组或者list集合;
private File[] upload;
private String[] uploadContextType;
private String[] uploadFileName;
......
//get/set方法
......
public void uploadFile() {
// 得到upload目录在tomcat的绝对磁盘路径
String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
for(int i=0;i<upload.length;i++) {
//创建一个服务端文件
File dest = new File(realPath,uploadFileName[i]);
try {
//文件上传操作
FileUtils.copyFile(upload[i], dest);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
附
<!-- 设置常量,显示错误信息 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 修改最大文件限制的大小 -->
<constant name="struts.multipart.maxsize" value="20971520"></constant>
<action name="up" class="cn.itheima.action.UploadAction"
method="uploadFile">
<result name="input">/error.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize"></param> <!-- 设置每一个action允许的上传文件大小 -->
<param name="allowedTypes"></param> <!-- 设置上传允许的文件的mimeType类型,多个使用逗号分开 -->
<param name="allowedExtensions">bmp,txt</param> <!-- 设置上传文件允许的后缀名,多个使用逗号分开 -->
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>