1.Commons-FileUpload组件
Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目。
2.Commons-FileUpload组件特点:
- 使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
- 能够全程控制上传内容
- 能够对上传文件的大小、类型进行控制
3.下载包
需要下载Common-FileUplaod框架地址:
http://jakarta.apache.org/commons/fileupload/
–下载commons-fileupload-1.2-bin.zip文件
–解压后得到commons-fileupload-1.2.jar
http://jakarta.apache.org/commons/io/
–下载commons-io-1.3.2-bin.zip文件
–解压后得到commons-io-1.3.2.jar
4.案例
4.1文件上传页面upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>Insert title here</title>
</head>
<body>
<%-- <s:form action="uploadAction" method="post" enctype="multipart/form-data">
<s:file name="uploadImage" label="选择上传的文件" />
<s:submit value="上传" />
</s:form> --%>
<form action="uploadAction" method="post" enctype="multipart/form-data">
文件:<input type="file" name="uploadImage">
<input type="submit" value="提交">
</form>
</body>
</html>
4.2配置Struts2.xml
<!-- 配置图片上传的Action -->
<action name="uploadAction" class="com.liuyongqi.struts2.action.UploadAction">
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">500000000</param>
<param name="fileUpload.allowedTypes">image/jpeg</param>
<param name="fileUpload.allowedExtensions">.jpg,.gif</param>
</interceptor-ref>
<result name="success" type="redirect">success.jsp</result>
<result name="input" >/error.jsp</result>
</action>
4.3上传Action类UploadAction
package com.liuyongqi.struts2.action;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 配置图片上传的Action
* @author Administrator
*2018年7月16日下午4:21:41
*/
public class UploadAction extends ActionSupport{
//得到上传的文件
private File uploadImage;
//得到文件的类型
private String uploadImageContentType;
//得到文件的名称
private String uploadImageFileName;
public File getUploadImage() {
return uploadImage;
}
public void setUploadImage(File uploadImage) {
this.uploadImage = uploadImage;
}
public String getUploadImageContentType() {
return uploadImageContentType;
}
public void setUploadImageContentType(String uploadImageContentType) {
this.uploadImageContentType = uploadImageContentType;
}
public String getUploadImageFileName() {
return uploadImageFileName;
}
public void setUploadImageFileName(String uploadImageFileName) {
this.uploadImageFileName = uploadImageFileName;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("fileName:"+this.getUploadImageFileName());
System.out.println("contentType:"+this.getUploadImageContentType());
System.out.println("File:"+this.getUploadImage());
String date=new Date().getTime()+"";
String filename =date +this.getUploadImageFileName();
//获取要保存文件夹的物理路径(绝对路径)
String realPath="C:\\work\\tomcat\\apache-tomcat-8.0.29\\webapps\\upload\\Struts2Upload\\";
//String realPath=ServletActionContext.getServletContext().getRealPath("/upload");
String virtualPath="/upload/Struts2Upload/"+filename;
System.out.println(realPath);
File file = new File(realPath);
//测试此抽象路径名表示的文件或目录是否存在。若不存在,创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
if(!file.exists()){
file.mkdirs();
//file.createNewFile();
}
try {
//保存文件
FileUtils.copyFile(uploadImage, new File(file,filename));
System.out.println("成功");
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("realPath", virtualPath);
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
}
最后可以c's测试一下