使用servlet来实现
- 配置pom.xml
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency>
- servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //创建一个文件处理工厂 FileItemFactory factory= new DiskFileItemFactory(); //创建一个存放临时中转的仓库 ServletContext servletContext = this.getServletConfig().getServletContext(); File repository = (File) servletContext.getAttribute("javax.servlet.context.temdir"); ((DiskFileItemFactory) factory).setRepository(repository); //创建一个处理上传的处理器 ServletFileUpload upload = new ServletFileUpload(factory); try { //获取从表单提交上来的数据,从表单上传的数据会自动被分割,比如一个input:text,input:file,就会被分成两个item List items = upload.parseRequest(req); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); //检查是否是文件 if(item.isFormField()) { //如果不是文件d String name = item.getFieldName(); String value =item.getString(); System.out.println(name+":"+value); }else { //如果是文件 String fieldName = item.getFieldName(); //这个fileName是上传文件名 String fileName = item.getName(); System.out.println(fieldName+":"+fileName); //新建一个文件,用于存储上传的文件 File uploadFile = new File("D:\",fileName); item.write(uploadFile); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
- 在web.xml中配置好servlet
- 前端页面
<form action="/swfupload/fupload" enctype="multipart/form-data" method="post"></form>
使用spring mvc controller来实现
- 大部分都是和上面的一样,而配置spring mvc可以在前面的博客找到
- 配置controller
@RequestMapping(value="/upload.do",method=RequestMethod.POST) public void upload(HttpServletRequest request, HttpServletResponse response) { //定义一个文件上传工厂,配置一些上传限制 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("D:\")); //上传实现方法 ServletFileUpload upload = new ServletFileUpload(factory); try { //获取表彰提交 List items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); if (item.isFormField()) { //当不是文件的时候 String filedName = item.getFieldName(); String value = item.getString(); System.out.println(filedName + ":" + value); } else { //是文件的时候 String fileName = item.getName(); String path = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/"); System.out.println(path); //新建一个文件,并以上传文件名为文件名 File uploadFile = new File(path,fileName); //保存上传文件 item.write(uploadFile); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
@RequestMapping指定了访问的路径和访问的类型 - 前台页面
<form action="/swfupload/upload.do" enctype="multipart/form-data" method="post">
java 和 swfupload的结合
其实swfupload只是负责前台的各种逻辑,而java后台的处理依然是沿用普通的上传代码,也就是java后台处理的代码和上面的是一个样,只是前台代码使用swfupload写,而代码在官方网站上的demo写得非常全了