springmvc实现文件上传下载
2016-04-15 11:39
639 查看
package com.action; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.util.FileOperateUtil; @Controller @RequestMapping(value="fileOperate") public class FileOperateAction { @RequestMapping(value="upload") public String upload(HttpServletRequest request){ init(request); try { FileOperateUtil.upload(request); request.setAttribute("msg", "ok"); request.setAttribute("map", getMap()); } catch (Exception e) { e.printStackTrace(); } return "redirect:list"; } @RequestMapping(value="list") public ModelAndView list(HttpServletRequest request){ init(request); request.setAttribute("map", getMap()); return new ModelAndView("fileOperate/list"); } @RequestMapping(value="download") public void download(HttpServletRequest request, HttpServletResponse response){ init(request); try { String downloadfFileName = request.getParameter("filename"); downloadfFileName = new String(downloadfFileName.getBytes("iso-8859-1"),"utf-8"); String fileName = downloadfFileName.substring(downloadfFileName.indexOf("_")+1); String userAgent = request.getHeader("User-Agent"); byte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes("UTF-8"); fileName = new String(bytes, "ISO-8859-1"); response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName)); FileOperateUtil.download(downloadfFileName, response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } private void init(HttpServletRequest request) { if(FileOperateUtil.FILEDIR == null){ FileOperateUtil.FILEDIR = request.getSession().getServletContext().getRealPath("/") + "file/"; } } private Map<String, String> getMap(){ Map<String, String> map = new HashMap<String, String>(); File[] files = new File(FileOperateUtil.FILEDIR).listFiles(); if(files != null){ for (File file : files) { if(file.isDirectory()){ File[] files2 = file.listFiles(); if(files2 != null){ for (File file2 : files2) { String name = file2.getName(); map.put(file2.getParentFile().getName() + "/" + name, name.substring(name.lastIndexOf("_")+1)); } } } } } return map; } }
package com.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import java.util.Iterator; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; public class FileOperateUtil { public static String FILEDIR = null; /** * 上传 * @param request * @throws IOException */ public static void upload(HttpServletRequest request) throws IOException{ MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = mRequest.getFileMap(); File file = new File(FILEDIR); if (!file.exists()) { file.mkdir(); } Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); while(it.hasNext()){ Map.Entry<String, MultipartFile> entry = it.next(); MultipartFile mFile = entry.getValue(); if(mFile.getSize() != 0 && !"".equals(mFile.getName())){ write(mFile.getInputStream(), new FileOutputStream(initFilePath(mFile.getOriginalFilename()))); } } } private static String initFilePath(String name) { String dir = getFileDir(name) + ""; File file = new File(FILEDIR + dir); if (!file.exists()) { file.mkdir(); } Long num = new Date().getTime(); Double d = Math.random()*num; return (file.getPath() + "/" + num + d.longValue() + "_" + name).replaceAll(" ", "-"); } private static int getFileDir(String name) { return name.hashCode() & 0xf; } public static void download(String downloadfFileName, ServletOutputStream out) { try { FileInputStream in = new FileInputStream(new File(FILEDIR + "/" + downloadfFileName)); write(in, out); } catch (FileNotFoundException e) { try { FileInputStream in = new FileInputStream(new File(FILEDIR + "/" + new String(downloadfFileName.getBytes("iso-8859-1"),"utf-8"))); write(in, out); } catch (IOException e1) { e1.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } /** * 写入数据 * @param in * @param out * @throws IOException */ public static void write(InputStream in, OutputStream out) throws IOException{ try{ byte[] buffer = new byte[1024]; int bytesRead = -1; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } out.flush(); } finally { try { in.close(); } catch (IOException ex) { } try { out.close(); } catch (IOException ex) { } } } }
1. springmvc-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.action"/> <mvc:annotation-driven/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/"/> <property name="suffix" value=".jsp" /> </bean> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" /> </beans>
2. list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+ request.getContextPath()+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>list</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <style type="text/css"> a:link { text-decoration: none; } a:visited { text-decoration: none; } a:hover { color: #999999; text-decoration: underline; } </style> </head> <body> <br/> <c:forEach items="${map}" var="v"> <a href="<%=basePath%>fileOperate/download?filename=${v.key}">${v.value}</a><br/> </c:forEach> <br/><a href="<%=basePath%>fileOperate/upload.jsp">上传文件</a> </body> </html>
3. upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>upload</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <style type="text/css"> .input { width: 80px; height: 20px; line-height: 20px; background: #0088ff; text-align: center; display: inline-block; overflow: hidden; position: relative; text-decoration: none; top: 5px; } .input:hover { background: #ff8800; } .file { opacity: 0; filter: alpha(opacity = 0); font-size: 50px; position: absolute; top: 0; right: 0; } a:link { text-decoration: none; } a:visited { text-decoration: none; } a:hover { color: #999999; text-decoration: underline; } </style> </head> <body> <form action="<%=basePath %>fileOperate/upload" enctype="multipart/form-data" method="post"> <div> <input type="text" readonly="readonly" /> <a href="javascript:void(0);" class="input"> 浏览 <input type="file" class="file" name="filename1"> </a> </div> <div> <input type="text" readonly="readonly" /> <a href="javascript:void(0);" class="input"> 浏览 <input type="file" class="file" name="filename2"> </a> </div> <div> <input type="text" readonly="readonly" /> <a href="javascript:void(0);" class="input"> 浏览 <input type="file" class="file" name="filename3"> </a> </div> <input type="submit" value="上传"> </form> <br /> <a href="<%=basePath %>fileOperate/list">下载文件</a> <script type="text/javascript"> var nodes = document.getElementsByTagName("input"); for ( var i = 0; i < nodes.length; i++) { if("file" == nodes[i].type){ nodes[i].onchange = function(){ var textObj = this.parentNode.parentNode.getElementsByTagName("input")[0]; var textvalue = this.value; textvalue = textvalue.substring(textvalue.lastIndexOf("\\")+1, textvalue.length); textObj.value = textvalue; }; } } </script> </body> </html>
4. web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
5. index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>index</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <style type="text/css"> a:link { text-decoration: none; } a:visited { text-decoration: none; } a:hover { color: #999999; text-decoration: underline; } </style> </head> <body> This is my JSP page. <br> <br/><a href="<%=basePath%>fileOperate/upload.jsp">上传文件</a> </body> </html>
原文地址: http://www.oschina.net/code/snippet_1590790_48147
相关文章推荐
- myEclipse中设置代码区的背景颜色
- SpringBoot配置Email发送功能
- 解决mySql中文乱码以及Eclipse插入中文出现乱码
- Java相对路径/绝对路径总结
- java类别问题
- 进制数的计算方法图例(来源:传智播客马士兵 coreJava 学习视频)
- Eclipse常用快捷键,个人总结
- servelt和filter的映射规则
- JAVA生成二维码
- java随机生成字符串算法
- Eclipse插件——EasyExplore安装
- Spring事务详解
- Eclipse使用技巧 - 6. Eclipse去掉Git显示的黑条
- SpringMVC之Hello World
- SpringMVC Maven创建项目
- java排序之冒泡、插入、选择、快速等排序算法
- java DateUtil
- 详解设计模式(四)
- spring配置文件中<context:property-placeholder />的使用
- Java线程开启方式