java web 多文件上传和下载
2016-09-05 21:12
459 查看
Java web文件的上传和下载分两种情况,使用springmvc框架和直接使用servlet。这两种处理方式有所不同,是因为springMVC在处理文件上传的时候,对请求的request和response经过了处理。但这两种方式都需要引入文件上传包commons-fileupload和commons-io。
1、servlet处理问价上传
简单说来就是直接从request中取获取输入集合,然后判断输入集合是不是文件。
2、springmvc上传文件
springmvc上传文件的时候,需要在springmvc的配置文件中配置文件解析器,具体的配置可有:
1)利用CommonsMultipartFile对象直接获取
2) 利用多部分部解析器CommonsMultipartResolver
具体的上传样式可有:
<dependency> <groupid>commons-fileupload</groupid> <artifactid>commons-fileupload</artifactid> <version>1.3.1</version> </dependency> <dependency> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version>2.4</version> </dependency>
1、servlet处理问价上传
public void doGet(HttpServletRequest request, HttpServletResponse response){ Map<string string=""> retMap = new HashMap<string string="">(); try { String path = request.getServletContext().getRealPath("/upload"); File file = new File(path); if (!file.exists() && !file.isDirectory()) { logger.info("no folder and make a folder now"); file.mkdir(); } // 1、创建一个DiskFileItemFactory工厂,可以清理临时文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置临时目录 factory.setRepository(new File(path)); // 2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //设定文件大小 upload.setSizeMax(1000000 * 20); // 解决上传文件名的中文乱码 upload.setHeaderEncoding("UTF-8"); // 3、判断提交上来的数据是否是上传表单的数据 if (!ServletFileUpload.isMultipartContent(request)) { // 按照传统方式获取数据,直接返回 return; } // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<fileitem>集合,每一个FileItem对应一个Form表单的输入项 List<fileitem> list = upload.parseRequest(request); String itemNo = ""; for (FileItem item : list) { //如果fileitem中封装的是普通输入项的数据 if (item.isFormField()) { if ("itemNo".equals(item.getFieldName())) { itemNo = item.getString(); } } else { String filename = item.getName(); if (filename == null || filename.trim().equals("")) { continue; } // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename.substring(filename.lastIndexOf("\\") + 1); // 获取item中的上传文件的输入流 InputStream in = item.getInputStream(); FileOutputStream out = new FileOutputStream(path + "\\" + filename); byte buffer[] = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close(); out.flush(); // 删除处理文件上传时生成的临时文件 item.delete(); retMap.put("isSucc", "SUCC"); } } } catch (Exception e) { e.printStackTrace(); } return ; } </fileitem></fileitem></string></string>
简单说来就是直接从request中取获取输入集合,然后判断输入集合是不是文件。
2、springmvc上传文件
springmvc上传文件的时候,需要在springmvc的配置文件中配置文件解析器,具体的配置可有:
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <beans:property name="maxUploadSize" value="32505856"><!-- 上传文件大小限制为31M,31*1024*1024 --> <beans:property name="maxInMemorySize" value="4096"> </beans:property></beans:property></beans:bean>
1)利用CommonsMultipartFile对象直接获取
@RequestMapping("/upfile1") public String up1(@RequestParam("file") CommonsMultipartFile[] files, HttpServletRequest request, HttpServletResponse response) { String path = request.getServletContext().getRealPath("/static/upload1"); File file = new File(path); if (!file.exists() && !file.isDirectory()) { logger.info("no folder and make a folder now"); file.mkdir(); } if (files != null && files.length > 0) { for (int i = 0; i < files.length; i++) { if (!files[i].isEmpty()) { try { String fileName = files[i].getOriginalFilename(); // 拿到上传文件的输入流 FileInputStream in = (FileInputStream) files[i].getInputStream(); File targetFile = new File(path, fileName); FileOutputStream out = new FileOutputStream(targetFile); byte buffer[] = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("上传出错"); } } } } try { // String url = request.getRequestURL().toString(); url = url.substring(0, url.indexOf('/', url.indexOf("//") + 2)); //request.getRequestDispatcher(url+"/upload/showPic").forward(request, response); //response.sendRedirect(url+"/upload/"); } catch (Exception e) { e.printStackTrace(); } return "success"; }
2) 利用多部分部解析器CommonsMultipartResolver
@RequestMapping("/upfile2") public String up1(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException { String path = request.getServletContext().getRealPath("/static/upload1"); File file = new File(path); if (!file.exists() && !file.isDirectory()) { logger.info("no folder and make a folder now"); file.mkdir(); } // 创建一个通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); // 判断 request 是否有文件上传,即多部分请求 if (multipartResolver.isMultipart(request)) { // 转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; // 取得request中的所有文件名 Iterator<string> iter = multiRequest.getFileNames(); while (iter.hasNext()) { // 记录上传过程起始时的时间,用来计算上传时间 int pre = (int) System.currentTimeMillis(); // 取得上传文件 MultipartFile mfile = multiRequest.getFile(iter.next()); if (mfile != null) { // 取得当前上传文件的文件名称 String fileName = mfile.getOriginalFilename(); // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 if (fileName.trim() != "") { File targetFile = new File(path, fileName); System.out.println(targetFile); //mfile.transferTo(targetFile); // 拿到上传文件的输入流 FileInputStream in = (FileInputStream) mfile.getInputStream(); FileOutputStream out = new FileOutputStream(targetFile); byte buffer[] = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.flush(); out.close(); } } // 记录上传该文件后的时间 int finaltime = (int) System.currentTimeMillis(); System.out.println(finaltime - pre); } } return "/success"; } </string>
具体的上传样式可有:
相关文章推荐
- 跟阿根一起学Java Web开发三:文件上传与文件下载
- javaweb之文件上传和下载
- Javaweb 学习笔记之文件上传和下载-01
- JavaWeb——文件上传和下载
- JavaWeb——文件上传和下载
- Java-WEB文件上传下载例程
- javaweb 文件上传和下载
- JavaWeb——文件上传和下载
- Java web 中实现简单的文件上传与下载——学习笔记
- java web 一行代码实现文件上传下载
- JavaWeb -- 文件上传下载示例
- JavaWeb上传下载文件
- java web service 上传下载文件
- JavaWeb之文件上传与下载&邮件技术(十八)
- Java乔晓松-文件的上传和下载(Web) 2
- Portal-Basic Java Web 应用开发框架:应用篇(四) —— 文件上传和下载
- JavaWeb中struts2实现文件上传下载功能实例解析
- java-web文件上传下载
- JavaWeb 后端 <十四> 文件上传下载
- 用java在web环境下上传和下载文件的技巧