您的位置:首页 > 编程语言 > Java开发

struts2文件上传下载

2016-08-17 21:39 267 查看

基于struts2的文件上传与下载:

1.开发jar包



2.jsp页面:

<%@ page language="java" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<table >
<tr>
<td class="active">编号</td>
<td class="success">文件名</td>
<td class="warning">操作</td>
</tr>
<c:forEach var="fileName" items="${fileNames}" varStatus="vs">
<tr>
<td>${vs.count }</td>
<td>${fileName }</td>
<td>
<c:url var="url" value="down_down">
<c:param name="fileName" value="${fileName}"></c:param>
</c:url> <a href="${url }">下载</a></td>
</tr>
</c:forEach>
</table>
<s:form namespace="/" action="upload_upload" enctype="multipart/form-data">
<tr>
<td>选择课表:</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td colspan="3">
<s:file name="schedule"></s:file>
</td>
<td>
<s:submit value="上传"></s:submit>
</td>
</tr>
</s:form>
</body>
</html>


3.action类:

public class FileAction  extends ActionSupport implements ModelDriven<Filer>{

private File schedule;				//文件内容
private String scheduleFileName;	//文件名称
private String scheduleContentType;	//文件类型(没有用)
public void setSchedule(File schedule) {
this.schedule = schedule;
}
public void setScheduleFileName(String scheduleFileName) {
this.scheduleFileName = scheduleFileName;
}
public void setScheduleContentType(String scheduleContentType) {
this.scheduleContentType = scheduleContentType;
}
/**
* 文件上传
* @return
*/
public String upload(){
try {
//将 文件保存硬盘中 -- 将课表的内容保存硬盘,文件名随机,没有扩展名 (及将一个文件拆分两部分:内容,文件名)
//1 上传文件父目录 WEB-INF/upload.
System.out.println("前台传来的文件"+schedule.getName());
String parentDir = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload");
File destFile = new File(parentDir, scheduleFileName);
//2 保存文件
FileUtils.copyFile(schedule, destFile);
System.out.println(schedule.getName());
System.out.println("--------->"+scheduleFileName);
System.out.println(parentDir);
//3 保存
return "upload";
} catch (IOException e) {
e.printStackTrace();
return ERROR;
}
}
public String listJsp(){
//得到upload目录路径
String path = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload");
// 目录对象
File file  = new File(path);
// 得到所有要下载的文件的文件名
String[] fileNames =  file.list();
// 保存
ActionContext ac = ActionContext.getContext();
// 得到代表request的map (第二种方式)
@SuppressWarnings("unchecked")
Map<String,Object> request= (Map<String, Object>) ac.get("request");
request.put("fileNames", fileNames);
return "listJsp" ;
}
/* // 保存
ActionContext ac = ActionContext.getContext();
// 得到代表request的map (第二种方式)
Map<String,Object> request= (Map<String, Object>) ac.get("request");
request.put("fileNames", fileNames);*/
for(int j=0;j<fileList.size();j++){
System.out.println(fileList.get(j).getFileName());
}
result.put("total", fileList.size());//total键 存放总记录数,必须的
result.put("rows", fileList);//rows键 存放每页记录 list
return "list";
}

/*************2. 文件下载*********************/

public void setFileName(String fileName) {
try {
fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
this.fileName = fileName;
}

public String down() throws Exception {
fileName = filer.getFileName() ;
System.out.println("------------------>"+fileName);
fileInput = ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/upload/" + fileName) ;
System.out.println(fileInput);
return "download";
}
// 4. 下载显示的文件名(浏览器显示的文件名)
public String getDownFileName() {
// 需要进行中文编码
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return fileName;
}
@Override
public Filer getModel() {
return filer;
}

private String fileName;
private InputStream fileInput ;

public InputStream getFileInput() {
return ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/upload/" + fileName);
}
public void setFileInput(InputStream fileInput) {
this.fileInput = fileInput;
}
public File getSchedule() {
return schedule;
}
public String getScheduleFileName() {
return scheduleFileName;
}
public String getScheduleContentType() {
return scheduleContentType;
}
public String getFileName() {
return fileName;
}

}


4.struts2配置文件

<package name="upload" namespace="/" extends="struts-default ,json-default">
<action name="upload_*" class="com.test.action.FileAction" method="{1}">
<!-- 上传成功 重定向 -->
<result name="upload" type="redirectAction">upload_listJsp</result>
<result name="listJsp">/upload.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="down_*" class="com.test.action.FileAction" method="{1}">
<!-- 下载操作 -->
<result name="download" type="stream">
<!--  运行下载的文件的类型:指定为所有的二进制文件类型
<param name="contentType">application/octet-stream</param> -->
<!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
<param name="inputName">fileInput</param>
<!-- 下载头,包括:浏览器显示的文件名 -->
<param name="contentDisposition">attachment;filename=${downFileName}</param>
<!-- 缓冲区大小设置 -->
<param name="bufferSize">1024</param>
</result>
</action>
5.结果展示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息