本文主要是實現uploadify+struts2實現文件上傳,功能大概有 html
a.檢測文件是否已經上傳,若是已經上傳(這裏主要是檢測文件名是否相同),就再也不上傳,而且給出提示。 java
b.若是選擇的文件以前沒有上傳,就上傳此文件,而且把文件的相應信息保存到數據庫(保存的信息包括此文件剛開始上傳時間,上傳結束後時間,還有文件名)。 ajax
c.上傳文件成功後,經過uploadify內置的onQueueComplete函數,在此函數裏使用ajax函數,從數據庫中查詢全部保存的文件信息,列出到table裏。 數據庫
上傳的UploadAction.java核心函數public String save() jsp
private Logger logger=Logger.getLogger(getClass()); private List<File> Filedata; /** 文件名 */ private List<String> FiledataFileName; public List<File> getFiledata() { return Filedata; } public void setFiledata(List<File> filedata) { Filedata = filedata; } public List<String> getFiledataFileName() { return FiledataFileName; } public void setFiledataFileName(List<String> filedataFileName) { FiledataFileName = filedataFileName; } public List<String> getFiledataContentType() { return FiledataContentType; } public void setFiledataContentType(List<String> filedataContentType) { FiledataContentType = filedataContentType; } public String getName() { return name; } public void setName(String name) { this.name = name; } /** 文件內容類型 */ private List<String> 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中 }); }