你的位置:首页 > Java教程

[Java教程]表单文件上传与文件下载


一、简介

  使用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="导&nbsp;入" />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=" + fileName);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     }