版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41548307/article/details/82937019
单个文件上传
表单设置enctype="multipart/form-data“
表单设置method="POST“ <s:file name="f1" label="logo"/>
多文件上传:
把所有的属性改为数组即可。
private File []f1;
private String [] contentType;
private String [] fileName;
Action中设置:
get,set方法必须添加file的名字;
f1, contentType, fileName三个属性 (f1为File类型, contentType, fileName为String类型)
f1的getter/setter方法
f1ContentType的getter/setter方法
f1FileName的getter/setter方法
//上传Action
public class UpfileAction extends ActionSupport {
private File file;
private String contentType;
private String fileName;
private String txt;
public String getTxt() {
return txt;
}
public void setTxt(String txt) {
this.txt = txt;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return contentType;
}
public void setFileContentType(String contentType) {
this.contentType = contentType;
}
public String getFileFileName() {
return fileName;
}
public void setFileFileName(String fileName) {
this.fileName = fileName;
}
@Override
public String execute() throws Exception {
System.out.println(txt);
// 获取服务器根目录
String path = ServletActionContext.getServletContext().getRealPath(
"/upfile");
// 创建服务根目录下的文件夹
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
// 目标文件
File dest = new File(dir, fileName);
// 字节输入输出流
FileInputStream in = new FileInputStream(file);
FileOutputStream out = new FileOutputStream(dest);
// 临时缓存
byte[] b = new byte[1024];
int len = -1;
// 文件复制
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
// 关流
in.close();
out.close();
// 返回提示信息
this.addActionMessage("文件上传成功!");
return SUCCESS;
}
}
//下载Action
public class DownloadAction extends ActionSupport {
private int id;
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public InputStream getInputStream(){
try {
//设置下载文件名称
fileName=URLEncoder.encode("高清无码.avi","UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//设置下载文件路径
String filepath = "upfile/aaaaa.xlsx";
return ServletActionContext.getServletContext().getResourceAsStream(filepath);
}
@Override
public String execute() throws Exception {
System.out.println(id);
return SUCCESS;
}
}
struts.xml中的配置:
<struts>
- <!-- 配置文件上传上限
-->
<constant name="struts.multipart.maxSize" value="10000000" />
- <!-- 使用国际化配置
-->
<constant name="struts.custom.i18n.resources" value="res" />
- <package name="testpack" extends="struts-default" namespace="/">
- <action name="upfile" class="com.web.action.UpfileAction">
<result>/index.jsp</result>
<result name="input">/index.jsp</result>
- <!-- 添加拦截器实现文件上传限制
-->
- <interceptor-ref name="defaultStack">
- <!-- 文件大小,单位字节
-->
<param name="fileUpload.maximumSize">1000000</param>
- <!-- 文件类型
-->
- <!-- <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-excel</param>
-->
- <!-- 文件后缀
-->
<param name="fileUpload.allowedExtensions">.txt,.xls</param>
</interceptor-ref>
</action>
- <action name="download" class="com.web.action.DownloadAction">
- <!-- 文件下载时result标签的type属性设置成stream
-->
- <result type="stream">
- <!-- 配置下载文件类型
-->
<param name="contentType">application/octet-stream</param>
- <!-- 下载文件名称
-->
<param name="contentDisposition">attachment;filename="${fileName}"</param>
- <!-- *下载文件流对象
-->
<param name="inputName">inputStream</param>
- <!-- 文件大小
-->
<param name="bufferSize">2048</param>
- <!-- 设置是否缓存
-->
<param name="allowCaching">false</param>
- <!-- 字符编码
-->
<param name="contentCharSet">UTF-8</param>
</result>
</action>
</package>
</struts>
JSP页面中的配置:
引入struts2标签
<%@ taglib uri="/struts-tags" prefix="s" %>
<body>
<s:actionerror/> //错误提示
<s:actionmessage/>
<s:form action="upfile" method="post" namespace="/" enctype="multipart/form-data">
<s:textfield name="txt" label="标题"></s:textfield>
<s:file name="file" label="文件上传"></s:file>
<s:submit value="提交"></s:submit>
</s:form>
</body>
//下载JSP页面
<body>
<a href="download?id=100001">下载</a>
</body>