前端jsp页面:
需要注意form标签需要引入这句:enctype="multipart/form-data"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>上传文件的页面</title> </head> <body> <form action="${pageContext.request.contextPath }/fileUploadAction" method="post" enctype="multipart/form-data"> 文件名:<input type="text" name="filename"/><br/> 文件:<input type="file" name="file1"/><br/> <input type="submit" value="上传文件"> </form> </body> </html>
action中的页面
package com.bie.upload; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /** * @author BieHongLi * @version 创建时间:2017年3月6日 上午10:43:52 * 上传文件的Action处理 * * struts2文件上传 * 1:struts2中文件上传拦截器帮助我们完成上传文件的功能; * * */ public class UploadAction extends ActionSupport{ //对应表单的file1 <input type="file" name="file1"/> private File file1; //当前上传的文件名 private String file1FileName; //文件类型(MIME) private String file1ContentType;
public void setFile1(File file1) { this.file1 = file1; } public void setFile1FileName(String file1FileName) { this.file1FileName = file1FileName; } public void setFile1ContentType(String file1ContentType) { this.file1ContentType = file1ContentType; } @Override public String execute() throws Exception { //开始拿到上传的文件,进行处理,上传之前,要创建一个upload目录//把文件上传到upload目录,获取上传的目录路径 String path=ServletActionContext.getServletContext().getRealPath("/upload");
//创建目标文件对象,文件名file1FileName,格式_FileName File targetFile=new File(path,file1FileName);
//把上传的文件,拷贝到目标文件中 把file1的文件拷贝到 targetFile目录中 FileUtils.copyFile(file1, targetFile); return SUCCESS; } }
可以设置上传 文件的大小、和类型
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 声明包 --> <package name="fileuploadpackage" extends="struts-default"> <!-- 定义action --> <action name="fileUploadAction" class="com.bie.upload.UploadAction"> <!-- 显示成功的jsp页面 --> <result name="success">/uploadfile/success.jsp</result> <!-- 文件上传拦截器,限制运行上传的文件的类型,还有其他一个方法,这是其中一个 --> <interceptor-ref name="defaultStack"> <!-- 限制运行的文件的扩展名 fileUpload.allowedExtensions固定写法--> <param name="fileUpload.allowedExtensions">txt,jpg,gif,png</param> </interceptor-ref> <!-- 错误提示,档文件上传出现错误的时候,struts内部会返回input视图, 错误视图,所以就需要我们在struts.xml中配置Input视图对应的错误页面 --> <result name="input">/uploadfile/error.jsp</result> </action> </package> </struts>
参考代码
<!-- 限制文件的扩展名,如果有多个限制条件用逗号隔开 <interceptor-ref name="defaultStack"> <param name="fileUpload.allowedExtensions">jpg</param> </interceptor-ref> --> <!-- 限制文件的MIME,如果有多个文件时使用逗号隔开 --> <interceptor-ref name="defaultStack"> <param name="fileUpload.allowedTypes">image/jpeg</param> </interceptor-ref> <result name="input">upload.jsp</result>