struts2实现文件的上传下载,一些关键代码我都有解释,这里只实现,没有对功能做进一步升级。
使用到的工具:
IDE:IDEA
javaIDK 1.8
构建工具:gradle
服务器:tomcat9
此次内容使用到的基本环境自己去配,代码部分,不论你用任何工具,或者技术,都是殊途同归的,下面直接上代码:
需要注意的是,在这个demo里,我使用的Lombok插件,作用是,用注解代替了setter,getter方法,具体用法我就不细说了,配置比较简单,给大家一个:参考
可能会因为构建工具的不同在设置方面有些不同,自行百度解决,解决不了的留言
单文件上传:
fileUpload.jsp:
// 单文件上传的jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--<s:fielderror/>-->
<form action="fileUpload" method="post" enctype="multipart/form-data">
<s:textfield name="fileName" label="文件名"/>
<s:file name="doc" label="上传文件"/>
<s:submit label="提交"/>
</form>
</body>
</html>
fileUploadAction:
///单文件上传的action
package Action;
import com.opensymphony.xwork2.ActionSupport;
import lombok.Getter;
import lombok.Setter;
import java.io.*;
public class fileUploadAction extends ActionSupport {
@Getter@Setter
private File doc;
@Setter@Getter
private String fileName;
@Getter@Setter
private String docFileName;
@Getter@Setter
private String docContentType;
public String execute()throws Exception{
System.out.println("用户传入的文件名为:"+fileName);
System.out.println("上传文件的真实文件名为:"+docFileName);
System.out.println("文件Type为:"+docContentType);
System.out.println("传入后的临时文件名:"+doc.getName());
OutputStream output = null;
InputStream input = null;
try{
//把上传过来的文件存放到e盘temp目录下,没有则创建,以真实的文件名作为名字
output = new FileOutputStream("e:/temp/"+docFileName);
//建立一个10k缓冲区
byte [] bs = new byte[10240];
//将上传过来的文件输出到output中
input = new FileInputStream(doc);
int length = 0;
//length=input.read(bs)这句话中,length=-1代表读到文件结尾
while ((length=input.read(bs))>0){
output.write(bs, 0,length);
}
}finally {
input.close();
output.close();
}
return SUCCESS;
}
}
struts.xml:
//这里只给出action部分,剩下的地方大家都会
<action name="fileUpload" class="Action.fileUploadAction">
<result name="success ">/uploadSuccess.jsp</result>
<result name="input">/index.jsp</result>
</action>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>jee2019</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
到这里单文件的上传功能已经实现了,下面上下载的代码:
fileDownload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="fileDownloadAction.action">下载文件</a>
</body>
</html>
fileDownloadAction
package Action;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class fileDownloadAction extends ActionSupport {
public InputStream getInputStream()throws Exception{
File file = new File("e:/temp/test.txt");
return new FileInputStream(file);
}
}
struts.xml,这里需要注意下,param已经指定了下载内容:
<action name="fileDownloadAction" class="Action.fileDownloadAction">
<result type="stream">
<param name="contentDisposition">attachment;filename="test.txt"</param>
</result>
</action>
web.xml与之前的一样