本文主要是实现uploadify+struts2实现文件上传,功能大概有
a.检测文件是否已经上传,如果已经上传(这里主要是检测文件名是否相同),就不再上传,并且给出提示。
b.如果选择的文件之前没有上传,就上传此文件,并且把文件的相应信息保存到数据库(保存的信息包括此文件刚开始上传时间,上传结束后时间,还有文件名)。
c.上传文件成功后,通过uploadify内置的onQueueComplete函数,在此函数里使用ajax函数,从数据库中查询所有保存的文件信息,列出到table里。
上传的UploadAction.java核心函数public String save()
private Logger logger=Logger.getLogger(getClass()); private ListFiledata; /** 文件名 */ private List FiledataFileName; public List getFiledata() { return Filedata; } public void setFiledata(List filedata) { Filedata = filedata; } public List getFiledataFileName() { return FiledataFileName; } public void setFiledataFileName(List filedataFileName) { FiledataFileName = filedataFileName; } public List getFiledataContentType() { return FiledataContentType; } public void setFiledataContentType(List filedataContentType) { FiledataContentType = filedataContentType; } public String getName() { return name; } public void setName(String name) { this.name = name; } /** 文件内容类型 */ private List FiledataContentType; private String name; ActionContext ac=ActionContext.getContext(); ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);
public String save(){ java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String d1; //定义d1变量用于保存起始上传时间 String d2; //定义d2变量用于保存上传结束时间 boolean exist=false; //定义exist变量标识此文件是否已经上传,默认为false HttpServletResponse response = ServletActionContext.getResponse(); response.setHeader("ContentType", "text/html"); response.setCharacterEncoding("utf-8"); //response设置响应客户端的编码为utf-8 String savePath = sc.getRealPath("/"); savePath = savePath + "prov"+File.separator+"cable"+File.separator; //设置保存目录 File f1 = new File(savePath); if (!f1.exists()) { //如果此目录不存在,则创建 synchronized (FileUtils.class) { f1.mkdirs(); } } int size = Filedata.size(); logger.info("size:"+size); if (size == 0) return ERROR; String name = null; //设置name变量保存文件名 for (int i = 0; i < size; i++) { d1=sdf.format( Calendar.getInstance().getTime()); //取得上传时间,存于d1 name=FiledataFileName.get(i); File file=new File(savePath+name); if(file.exists()){ //如果要上传的文件已经存在,则设置exist变量为true,继续下一文件上传,不对此文件进行处理 exist=true; continue; } try { FileUtils.copyFile(Filedata.get(i), file); d2=sdf.format( Calendar.getInstance().getTime()); //取得上传结束时间,存于d2,(同时可在此作保存文件信息到数据库的处理...) logger.info("start time:"+d1+",end time"+d2+",file name"+name); } catch (IOException e) { e.printStackTrace(); } } try { if(exist){ //如果此文件存在,重置exist为false,并且输出此文件名到客户端 exist=false; response.getWriter().println(name); }else{ response.getWriter().println(0); //如果此文件不存在,则输出0到客户端 } } catch (IOException e) { e.printStackTrace(); } return null; }
前台上传文件:upload.jsp'onUploadSuccess' : function(file, data, response) { if(data!=0){ //如果此文件已经存在,则提示出来... alert('The file '+file.name+' was exists in the target folder...'); } }, 'onQueueComplete' : function(queueData) { $.ajax({ //后台处理完所有上传文件后,调用此ajax函数从数据库查询文件保存的信息到table中 }); }