Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

一、Struts2中简单的文件上传

     1):表单必须使用POST方式提交;

     2):使用二进制编码:enctype="multipart/form-data";

     3):<input type="file" name=""/>;

4):通过struts2标签生成表单

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

5):Action中通过Set()方法获得表单中的数据

 Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

6):将通过网络获得的文件复制到服务器目的 文件中

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

7):文件上传成功

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

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拦截器完成了文件上传的操作.

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

 

1):通过配置fileUpload拦截器参数,控制上传文件的大小和文件类型.

    1:控制单个文件的最大字节.

    2:控制上传文件的类型,比如png,jpg,jpeg,bmp.

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

 拦截失败,返回错误信息

Java轻量级MVC框架Struts2 2.5详解(6)struts2文件上传和下载

 2):重新定义文件上传拦截失败出错提示