表单文件上传与文件下载
一、简介
使用form表单进行需要为form添加enctype="multipart/form-data" 属性,除此之外还需要将表单的提交方法改成post,如下 method="post"。
二、示例
1、表单文件上传
网页代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 </head> 5 <body> 6 <form action="${pageContext.request.contextPath}/file/upload.action" method="post" enctype="multipart/form-data"> 7 <div id="contentTable" style="border: 0px;"> 8 <h1 class="title" style="font-size: 15px; border-bottom: 1px solid #DFE3E6;">导入数据</h1> 9 <table width="80%"> 10 <tr> 11 <td width="20%"align="right"> 12 选择要上传的文件 13 </td> 14 <td width="70%" id="name_h" title="" style="text-align: center;"> 15 <input type="file" name="xlsfile" id="xlsfile" /> 16 </td> 17 </tr> 18 </table> 19 <div id="activityTable"> 20 <input id="btnSave" type="submit" value="导 入" /> 21 </div> 22 </div> 23 </form> 24 </body> 25 </html>
后端上传处理代码:
1 /** 2 *使用springmvc处理文件上传 3 */ 4 @RequestMapping("upload") 5 @ResponseBody 6 public boolean upload(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws UnsupportedEncodingException { 7 String path = request.getSession().getServletContext().getRealPath(""); 8 Calendar calendar = Calendar.getInstance(); 9 calendar.setTime(new Date()); 10 request.setCharacterEncoding("UTF-8"); 11 path = String.format("%s\\%s\\%s\\%s\\%s\\%s", path, "upload", "file", calendar.get(calendar.YEAR), 12 calendar.get(calendar.MONTH), calendar.get(calendar.DAY_OF_MONTH)); 13 File filepath = new File(path); 14 if (!filepath.exists()) { 15 filepath.mkdirs(); 16 } 17 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 18 获得文件 19 MultipartFile multipartFile = multipartRequest.getFile("xlsfile"); 20 OutputStream os = null; 21 InputStream is = null; 22 File uploadFile = null; 23 try { 24 is = multipartFile.getInputStream(); 25 uploadFile = new File(filepath, System.currentTimeMillis() + ".xls"); 26 os = new FileOutputStream(uploadFile); 27 IOUtils.copy(is, os);//使用commons-io组件进行文件流的处理 28 os.flush(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 return false; 32 }finally{ 33 IOUtils.closeQuietly(os); 34 IOUtils.closeQuietly(is); 35 } 36 return true; 37 }
2、文件下载
1 /** 2 *使用springmvc进行文件下载处理 3 */ 4 @RequestMapping({ "/template" }) 5 public void downloadTemplate(HttpServletRequest request, HttpServletResponse response) 6 throws UnsupportedEncodingException { 7 String path = request.getSession().getServletContext().getRealPath(""); 8 String filename = "模板文件.xls"; 9 File file = new File(path + "\\file\\templagte\\" + filename); 10 String userAgent = request.getHeader("User-Agent"); 11 byte[] bytes = userAgent.contains("MSIE") ? filename.getBytes() : filename.getBytes("UTF-8"); // fileName.getBytes("UTF-8")处理safari的乱码问题 12 String fileName = new String(bytes, "ISO-8859-1"); 13 // 设置输出的格式 14 response.setContentType("multipart/form-data"); 15 response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8")); 16 17 InputStream inStream = null; 18 try { 19 inStream = new FileInputStream(file); 20 IOUtils.copy(inStream, response.getOutputStream());//使用commons-io组件进行文件流的处理 21 } catch (IOException e) { 22 e.printStackTrace(); 23 }finally{ 24 IOUtils.closeQuietly(inStream); 25 }