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.结果展示:
相关文章推荐
- struts2学习笔记(11)——struts2文件上传与下载
- struts2文件上传下载
- struts2 文件上传和下载,以及部分源码解析
- Struts2 多文件上传下载
- Struts2之实现文件上传与下载
- Struts2学习笔记16:Struts2的文件上传和下载【续】三
- Struts2文件的上传和下载
- Struts2文件的上传和下载
- Struts2文件上传和下载
- Struts2文件的上传和下载
- Struts2文件的上传和下载
- struts2文件的上传和下载功能
- Struts2 多个文件上传和下载(支持中文文件名)
- 【原创】Struts2学习笔记之文件的上传与下载
- Struts2学习笔记13:Struts2的文件上传和下载
- Struts2文件上传与下载
- Struts2学习笔记14:Struts2的文件上传和下载【续】
- [转载] 第六章 struts2文件上传与下载
- Struts2文件上传与下载
- struts2 文件上传与下载原理