<%--
Created by IntelliJ IDEA.
User: elliott
Date: 2017/9/16
Time: 15:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>注册</title>
</head>
<body>
<%--enctype="multipart/form-data" 提交文件必须要加上--%>
<s:form action="register" method="POST" theme="xhtml" enctype="multipart/form-data">
<s:textfield name="useranme" label="用户名"/>
<s:password name="password" label="密码"/>
<s:password name="repassword" label="确认密码"/>
<s:radio list="{'男', '女'}" label="性别" name="sex"/>
<s:radio list="#{1:'男', 2:'女'}" name="resex" label="确定性别"/>
<s:checkboxlist list="#{1:'影视', 2:'睡觉', 3:'游戏', 4:'音乐'}" label="爱好" name="hobby"/>
<s:select list="#{1:'北京',2:'河南',3:'山东'}" name="address" label="出生地"/>
<s:file label="头像" name="photo"/>
<s:file label="头像2" name="photo"/>
<s:textarea name="desc" label="个人简介"/>
<s:submit value="注册"/>
<s:reset value="点我"/>
</s:form>
</body>
</html>
package com.lanou.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.List;
/**
* 用于注册的Action
*/
public class RegisterAction extends ActionSupport {
// 定义各种接收参数的属性
private String useranme;
private String password;
private String repassword;
private String sex;
private String resex;
private String[] hobby;
private String address;
// 文件对象
//private List<File> photo;
private File photo;
private String desc;
// 文件名字 File的属性名+FileName
private String photoFileName;
// 文件字段的类型 File的属性名+ContentType
private String photoContentType;
@Override
public String execute() throws Exception {
FileUtils.copyFile(photo, new File("upload/" + photoFileName));
return SUCCESS;
}
public void setUseranme(String useranme) {
this.useranme = useranme;
}
public String getUseranme() {
return useranme;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public String getRepassword() {
return repassword;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
public void setResex(String resex) {
this.resex = resex;
}
public String getResex() {
return resex;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
public String getPhotoFileName() {
return photoFileName;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String getPhotoContentType() {
return photoContentType;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--上传文件总的大小的限制byte字节 默认2MB-->
<constant name="struts.multipart.maxSize" value="10240000"/>
<package name="register" namespace="/" extends="struts-default">
<!--注册Action的配置-->
<action name="register" class="com.lanou.action.RegisterAction" method="execute">
<interceptor-ref name="defaultStack">
<!--通过拦截器上传文件时,设置对应的参数-->
<!--设置上传文件的大小-->
<param name="fileUpload.maximumSize">2097152</param>
<!--设置上传文件的后缀名的类型(多个以 逗号 隔开)-->
<param name="fileUpload.allowedExtensions">jpg,gif,png</param>
<!--设置上传文件的MIME的类型(多个以 逗号 隔开)-->
<param name="fileUpload.allowedTypes">image/gif,image/png,image/jpeg</param>
</interceptor-ref>
<result name="success">/index.jsp</result>
</action>
<action name="download" class="com.lanou.action.DownLoadAction" method="execute">
<!--下载的时候 告诉浏览器返回的类型对应的是个文件流-->
<result type="stream">
<!--调用getContentType-->
<param name="contentType">${contentType}</param>
<!--调用getDownLoadFileName-->
<param name="contentDisposition">attachment;filename=${downLoadFileName}</param>
<!--文件流的名字 只指明名字-->
<param name="inputName">inputStream</param>
<!--<param name="inputStream">${inputStream}</param>-->
</result>
</action>
</package>
</struts>
<%--
Created by IntelliJ IDEA.
User: elliott
Date: 2017/9/16
Time: 16:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>下载页面</title>
</head>
<body>
<%--定义一个 url 网址--%>
<%-- download.action?fileName=飞机05.gif --%>
<s:url action="download" namespace="/" var="downurl">
<s:param name="fileName" value="%{'飞机05.gif'}"/>
</s:url>
<s:a href="%{#downurl}">下载</s:a>
</body>
</html>
package com.lanou.action;
import com.lanou.utils.DownloadUtils;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import java.io.*;
public class DownLoadAction extends ActionSupport {
private String fileName;
private InputStream inputStream;
private String contentType;
private String downLoadFileName;
@Override
public String execute() throws Exception {
// fileName = new String(fileName.getBytes("ISO-8859-1"), "UTF-8");
// System.out.println(fileName);
return SUCCESS;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* 生成下载时 需要的文件流
* @return
* @throws UnsupportedEncodingException
* @throws FileNotFoundException
*/
public InputStream getInputStream() throws UnsupportedEncodingException, FileNotFoundException {
// 文件名 乱码转换
fileName = new String(fileName.getBytes("ISO-8859-1"), "UTF-8");
// 根据文件名生成 文件流 提供给下载时使用
FileInputStream fis = new FileInputStream("upload/" + fileName);
return fis;
}
/**
* 生成下载时候需要的ContentType
* @return
*/
public String getContentType() {
// 获取当前文件的 MimeType
String type = ServletActionContext.getServletContext().getMimeType(fileName);
return type;
}
/**
* 生成下载的时候需要的文件名
* @return
* @throws UnsupportedEncodingException
*/
public String getDownLoadFileName() throws UnsupportedEncodingException {
String name = DownloadUtils.getDownloadFileName(ServletActionContext.getRequest().getHeader("user-agent"), fileName);
return name;
}
}