Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载
一、Struts2中简单的文件上传
1):表单必须使用POST方式提交;
2):使用二进制编码:enctype="multipart/form-data";
3):<input type="file" name=""/>;
4):通过struts2标签生成表单
5):Action中通过Set()方法获得表单中的数据
6):将通过网络获得的文件复制到服务器目的 文件中
7):文件上传成功
8):代码示例
upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<br>
<s:property value="#message"/>
<s:form action="/uploadxxx" method="post" enctype="multipart/form-data">
<s:textfield name="userName" label="操作人员"/><br>
<s:file name="file" label="文件" /><br>
<s:submit value="提交" /><br>
</s:form>
</body>
</html>
UploadAction.java
package org.openbox.upload;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private String userName;
public void setUserName(String userName) {
this.userName = userName;
}
//上传文件相关
private File file; //上传的文件
private String fileFileName; //文件原始名称
private String fileContentType; //文件的MIME类型
public void setFile(File file) {
this.file = file;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String fileUpload()throws Exception{
//获得文件上传存放目录
String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
//创建一个目的文件
File destFile=new File(realPath,fileFileName);
//将当前获得的文件file,复制到目的文件中
FileUtils.copyFile(file, destFile);
//上传成功显示信息
ActionContext.getContext().put("message", "文件 "+fileFileName+" 上传成功");
return Action.SUCCESS;
}
}
配置文件struts-upload.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="uploadPkg" namespace="/" extends="struts-default">
<!-- 配置ACTION -->
<action name="uploadxxx" class="org.openbox.upload.UploadAction" method="fileUpload">
<result name="success">/upload.jsp</result>
<allowed-methods>fileUpload</allowed-methods>
</action>
</package>
</struts>
二、文件上传的细节控制
1.文件的全局控制
default.properties文件中有全局参数配置:
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# struts.multipart.parser=cos
# struts.multipart.parser=pell
# struts.multipart.parser=jakarta-stream
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
Struts2支持cos,pell,jakarta文件上传组件,默认使用的jakarta(Apache).
struts.multipart.saveDir= //上传文件的临时目录,默认是在Tomcat下面.
struts.multipart.maxSize=2097152 //一次请求允许上传文件的最大字节数,默认是2M.
2.单个文件上传控制
Struts2中的FileUploadInterceptor拦截器完成了文件上传的操作.
1):通过配置fileUpload拦截器参数,控制上传文件的大小和文件类型.
1:控制单个文件的最大字节.
2:控制上传文件的类型,比如png,jpg,jpeg,bmp.
拦截失败,返回错误信息
2):重新定义文件上传拦截失败出错提示