版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ip_JL/article/details/82774580
上传
上传文件对表单的要求:
1 表单要用post方式提交:
2 表单的enctype类型是"multipart/form-data"
3 表单中要有file类型的文本域
Struts2框架的上传也是基于拦截器, 底层还是使用commons-upload组件
单文件上传:
工程结构图:
UploadAction动作类:
package com.rl.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
private String username;
/**
* input标签上传文件对应的name
*/
private File upload;
/**
* 固定写法: 上传的文件的文件名
*/
private String uploadFileName;
/**
* 固定写法: 获取上传文件的MIME类型, file属性名字的contentType
*/
private String uploadContentType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String upload() throws Exception{
//获取application
ServletContext sc = ServletActionContext.getServletContext();
//获取服务器的绝对路径
String realPath = sc.getRealPath("/");
//组装上传文件的路径
realPath = realPath + "upload\\"+uploadFileName;
//获取输入输出流
InputStream in = new FileInputStream(upload);
OutputStream out = new FileOutputStream(realPath);
int len = -1;
byte[] bs = new byte[1024];
while((len = in.read(bs)) != -1){
out.write(bs, 0, len);
}
out.close();
in.close();
return SUCCESS;
}
}
form.jsp表单:
扫描二维码关注公众号,回复:
3749264 查看本文章
<%@ 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">
</head>
<body>
<form action="${pageContext.request.contextPath }/upload/upload" enctype="multipart/form-data" method="post">
姓名: <input type="text" name="username"><br>
文件: <input type="file" name="upload"><br>
<input type="submit" value="提交"><br>
</form>
</body>
</html>
结果:
查看部署目录下的upload是否已上传成功:
也可以将动作类中的上传文件的方法进行简化:
public String upload() throws Exception{
//获取application
ServletContext sc = ServletActionContext.getServletContext();
//获取服务器的绝对路径
String realPath = sc.getRealPath("/");
//组装上传文件的路径
realPath = realPath + "upload\\"+uploadFileName;
FileUtils.copyFile(upload, new File(realPath));
return SUCCESS;
}
文件上传的验证(限制文件上传的类型和大小):
验证文件的类型:
struts.xml配置文件的动作类设置:
<action name="upload" class="com.rl.action.UploadAction" method="upload">
<!-- 主动引用默认拦截器栈
-->
<interceptor-ref name="defaultStack">
<!-- 设置参数"fileUpload.allowedExtensions"只允许".jpg"和".txt"格式的文件
-->
<param name="fileUpload.allowedExtensions">.jpg,.txt</param>
</interceptor-ref>
<result name="success">/success.jsp</result>
<result name="input">/form.jsp</result>
</action>
验证文件的大小:
默认的是2m, 修改struts.xml的常量配置:
<constant name="struts.multipart.maxSize" value="1024000"></constant>
此时上传大于1024000字节的则不成功
多文件上传:
只需要把接收的属性变成数组即可:
package com.rl.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadsAction extends ActionSupport {
private String username;
private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String upload() throws Exception{
ServletContext sc = ServletActionContext.getServletContext();
for(int i = 0; i < upload.length; i++){
String realPath = sc.getRealPath("/");
realPath = realPath + "upload\\"+uploadFileName[i];
FileUtils.copyFile(upload[i], new File(realPath));
}
return SUCCESS;
}
}
form1.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">
</head>
<body>
<s:fielderror></s:fielderror>
<s:actionerror/>
<form action="${pageContext.request.contextPath }/upload/uploads" enctype="multipart/form-data" method="post">
姓名: <input type="text" name="username"><br>
文件: <input type="file" name="upload"><br>
<input type="file" name="upload"><br>
<input type="file" name="upload"><br>
<input type="submit" value="提交"><br>
</form>
</body>
</html>
查看是否上传成功: