这篇文章将为大家详细讲解有关JSP后台文件管理源代码的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在网上找到个实现JSP后台文件管理的,就是Web端浏览器实现类似文件管理的功能(多了上传文件)。有源代码提供,就是写得乱了点。经整理改进,增加了文件下载功能,以及对大文件上传的支持(用commons.fileupload包,解决了smartupload包传输大文件就报错的Bug)。不过还没改下载(有时间改过来)。
<%-- 根据oddWorld 网站文件管理系统(简体中文版)修改 copy right by joard Ast,kliis admin.jsp 功能:网站文件后台管理页面。 admin.jsp 特点:单页面实现服务器后台文件的各项管理 转载敬请注明出处! --%> <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.io.*" %> <%@ page import="org.apache.commons.fileupload.*" %> <%@ page import="java.util.Date" %> <%@ page import="java.util.*" %> <%@ page import="com.jspsmart.upload.SmartUpload" %> <%@ page import="javax.servlet.http.HttpSession" %> <%@ page import="javax.servlet.http.HttpServletRequest" %> <%@ page import="java.lang.reflect.*" %> <% //中文字符转换%> <%! public static String UnicodeToChinese(String s) { try{ if(s==null || s.equals("")) return ""; String newstring=null; newnewstring=new String(s.getBytes("ISO8859_1"),"gb2312"); return newstring; } catch(UnsupportedEncodingException e) { return s; } } public static String ChineseToUnicode(String s) { try { if(s==null||s.equals("")) return ""; String newstring=null; newnewstring=new String(s.getBytes("gb2312"),"ISO8859_1"); return newstring; } catch(UnsupportedEncodingException e) { return s; } } public String getTime(String formats) { //取得自定义格式的时间 ("yyyyMM") ("yyyy_MM_dd_HHmmssSSS") 大S为毫秒 HH为24小时制,hh为12小时制 return new java.text.SimpleDateFormat(formats).format(java.util.Calendar.getInstance().getTime()); } %> <% //刷新问题 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); //自定义登陆用密码和用户名 //正确的用户名,可以另外添加连接数据库 String username="admin"; //正确的密码 String userpass="admin"; //得到系统路径,路径得到后加一杠,表示文件夹下 ServletContext app=(ServletContext)pageContext.getServletContext(); String strSysPath = app.getRealPath("/"); //处理对象物理路径 String strDealPath=""; //显示错误信息 String strErr=""; //代表页面的显示状态 //login 是显示登陆页面 //show 是正常的显示文件信息; //edit 是显示编辑文件的页面; //editDo是编辑文件的写入操作 //createF 是显示创建文件夹的页面; //createFDo 是创建文件夹的操作; //renameFold 是显示更改文件夹名称的页面; //renameFoldDo是更改文件夹名称的操作; //delFoldDo 是删除文件夹的操作; //renameFile 是显示更改文件名称的页面; //renameFileDo 是更改文件名称的操作; //delFileDo 是删除文件的操作; //uploadFile 是显示上传文件的页面; //uploadFileDo 是上传文件的操作; //添加的功能 uploadFile是显示下载文件的页面 //uploadFileDo是下载文件的操作 String strStat="login"; //用于show 状态下显示文件的数组 File[] fileArr=null; //根据传递的路径参数得到要处理对象的物理路径 if (request.getParameter("path")==null || request.getParameter("path").equals("")) { strDealPath=strSysPath; //如果从网页传来的路径为空,则默认采用 } else { //得到路径参数 strDealPath=UnicodeToChinese(request.getParameter("path")); } //检查session 的值是否存在,如果不存在着显示错误信息 //HttpSession session = request.getSession(false); if (session.getValue("loginIn")==null || !session.getValue("loginIn").equals("pass")) { strStat="login"; strErr="你还没有登陆或者登陆超时,请重新登陆!"; } //创建file 对象,检查目录是否存在 File myFile=new File(strDealPath); //检验文件夹是否存在 if(!myFile.exists()) { strErr="你选择的文件夹不存在,请重新选择!"; } //根据参数的不同,进行对应的操作 if(request.getParameter("act")==null || request.getParameter("act").equals("") || request.getParameter("act").equals("login") ) { if(request.getParameter("username")!=null && request.getParameter("userpass")!=null) { //正确的经过MD5 加密的密码 //String userpass="OEEO99107DC8C1EE2E06666B965601EF"; if( request.getParameter("username").equals(username) && (request.getParameter("userpass")).equals(userpass) ) { session.putValue("loginIn","pass"); response.sendRedirect(request.getRequestURI()+"?act=show"); } } else { strStat="login"; strErr="你还没有登陆或者登陆超时,请重新登陆!"; } } else if(request.getParameter("act").equals("show")) { //缺省,页面正常显示文件的信息 statStat="show" strStat="show"; //创建文件列表数组 fileArr=myFile.listFiles(); } else if(request.getParameter("act").equals("edit")) { //编辑文件内容的页面 //根据是否有request.getParameter("file") //以及相应文件是否存在,如果有,则进行编辑操作,如果没有,则显示错误提示信息 if (!(request.getParameter("file")==null || request.getParameter("file").equals(""))) { File fileEdit= new File(UnicodeToChinese(request.getParameter("path")) +UnicodeToChinese(request.getParameter("file"))); if(fileEdit.exists()) //文件编辑操作,实际就是更改页面的显示,用一个textarea 显示文件的信息,来做编辑 strStat="edit"; else //显示错误信息 strErr="你选择的文件不存在,请重新选择!"; }else { strErr="你没有选择要编辑的文件,请重新选择!"; } }else if(request.getParameter("act").equals("editDo")) { //把修改的内容写入文件,并且返回修改页面 if (!(request.getParameter("file")==null || request.getParameter("file").equals(""))) { File fileEdit= new File(UnicodeToChinese(request.getParameter("path")) +UnicodeToChinese(request.getParameter("file"))); if(fileEdit.exists()) { //文件编辑操作,实际就是在修改文件内容以后,再于页面上用一个textarea 显示文件的内容, //继续来做编辑或者查看修改的效果 if(!(request.getParameter("fileData")==null)) { try{ PrintWriter pwEdit =null; pwEdit=new PrintWriter(new FileOutputStream(UnicodeToChinese(request.getParameter("path")) +UnicodeToChinese(request.getParameter("file")))); pwEdit.println(UnicodeToChinese(request.getParameter("fileData"))); pwEdit.close(); response.sendRedirect(request.getRequestURI()+"?path="+ UnicodeToChinese(request.getParameter("path")) +"&file="+UnicodeToChinese(request.getParameter("file")) +"&act=edit"); return; }catch(Exception e) { strErr="文件写入错误,请重新选择!"; } } else { strErr="缺少修改文件内容的参数,请重新选择!"; } }else //显示错误信息 strErr="你选择的文件不存在,请重新选择!"; }else { strErr="你没有选择要编辑的文件,请重新选择!"; } }else if(request.getParameter("act").equals("createF")) { //创建新的文件夹的页面显示 strStat="createF"; }else if(request.getParameter("act").equals("createFDo")) { //创建新的文件夹 String strFoldName=strDealPath+UnicodeToChinese(request.getParameter("foldName")).trim()+"\\"; //out.println(strFoldName); //out.close(); File fileCreateF=new File(strFoldName); if(!fileCreateF.exists()) { try{ fileCreateF.mkdir(); response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); return; }catch(Exception e) { strErr="创建新文件夹失败!"; } } else { strErr="指定的文件夹名称和现有的文件夹名称重复,请重新指定一个新的文件夹名称!"; } } else if(request.getParameter("act").equals("delFoldDo")) { //删除操作 try{ String strFileDelF=strDealPath+UnicodeToChinese(request.getParameter("fold"))+"\\"; File fileDelF=new File(strFileDelF); if(fileDelF.exists()) { File[] fileArrCheck=fileDelF.listFiles(); if(!(fileArrCheck.length>0)) { fileDelF.delete(); response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); return; }else { strErr="文件夹下面还包含着文件,请把文件都删除,再删除文件夹"; } }else { strErr="要删除的文件夹不存在,请重新选择"; } }catch(Exception e) { strErr="文件夹删除操作错误!"; } } else if(request.getParameter("act").equals("renameFold")) { strStat="renameFold"; } else if(request.getParameter("act").equals("renameFoldDo")) { //文件夹更名操作 //根据参数判断是否对于文件夹名称有更改动作发生 if(request.getParameter("changeDo").equals("true")) { //有文件名,更名发生 try{ String strFileRenameF=strDealPath+UnicodeToChinese(request.getParameter("fold"))+"\\"; File fileRenameF=new File(strFileRenameF); //先用strFileRenameF获得当前的文件路径 String strFileRenameToF=strDealPath+UnicodeToChinese(request.getParameter("newFoldName"))+"\\"; File fileRenameToF=new File(strFileRenameToF); //判断更名的文件夹是否存在 if(fileRenameF.exists()) { //判断新的文件夹名称是否与现存的文件夹重名 if(!fileRenameToF.exists()) { fileRenameF.renameTo(fileRenameToF); response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); return; }else { strErr="指定的文件夹名称和现有的文件夹名称重复,请重新指定一个文件夹名称!"; } }else { strErr="要更名的文件夹不存在,请重新选择"; } }catch(Exception e) { strErr="文件夹更名操作错误!"; } } } else if(request.getParameter("act").equals("renameFile")) { strStat="renameFile"; } else if(request.getParameter("act").equals("renameFileDo")) { //文件更名操作 //根据参数判断是否对于文件名称有更改动作发生 if(request.getParameter("changeDo").equals("true")) { //有文件名,更名发生 try{ String strFileRenameFi=strDealPath+UnicodeToChinese(request.getParameter("file")); File fileRenameFi=new File(strFileRenameFi); String strFileRenameToFi=strDealPath+UnicodeToChinese(request.getParameter("newFileName")); File fileRenameToFi=new File(strFileRenameToFi); //判断更名的文件是否存在 if(fileRenameFi.exists()) { //判断新的文件名称是否与现存的文件重名 if(!fileRenameToFi.exists()) { fileRenameFi.renameTo(fileRenameToFi); response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); return; }else { strErr="指定的文件名称和现有的文件名称重复,请重新指定一个文件名称!"; } }else { strErr="要更名的文件不存在,请重新选择"; } }catch(Exception e) { strErr="文件更名操作错误!"; } } } else if(request.getParameter("act").equals("delFileDo")) { //删除操作 try{ String strFileDelFi=strDealPath+UnicodeToChinese(request.getParameter("file")); File fileDelFi=new File(strFileDelFi); if(fileDelFi.exists()) { fileDelFi.delete(); response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); return; } else { strErr="要删除的文件不存在,请重新选择"; } }catch(Exception e) { strErr="文件删除操作错误!"; } } //上传文件,用到smartupload组件 else if(request.getParameter("act").equals("uploadFile")) { strStat="uploadFile"; } else if(request.getParameter("act").equals("uploadFileDo")) { %> <% //上传文件操作 //mySmartUpload.initialize(pageContext); //mySmartUpload.setTotalMaxFileSize(100000000); //try //{ // mySmartUpload.upload(); // mySmartUpload.save(strDealPath); // response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); // return; //} catch (Exception e) //{ // strErr="文件上传出错,请检查是否超过100M 的文件大小限制!"; //} //重新用commons.fileupload包传输文件 %> <% String type="upload"; String fileExt=null; long fileSize=0; int count=0; String fileName=getTime("yyyyMMdd_HHmmssSSS"); String dateDir=getTime("yyyyMMdd")+"/"; String path=getServletContext().getRealPath("/")+type; File dir=new File(path); if(!dir.exists()) { dir.mkdir(); } pathpath=path+"/"+dateDir; dir=new File(path); if(!dir.exists()) { dir.mkdir(); } try{ DiskFileUpload fu=new DiskFileUpload(); fu.setSizeMax(1024*1024*500); // 设置允许用户上传文件大小,单位:字节 fu.setSizeThreshold(1024); // 设置最多只允许在内存中存储的数据,单位:字节 fu.setRepositoryPath("C:\\"); //设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的临时文件夹 List fileItems=fu.parseRequest(request); //开始读取上传信息 Iterator iter=fileItems.iterator(); // 依次处理每个上传的文件 while(iter.hasNext()) { FileItem item=(FileItem) iter.next(); if(!item.isFormField()) { //判断是否是文件框,忽略其他不是文件域的所有表单信息 count++; fileExt=item.getName(); //取得文件名,是客户端的文件路径,晕 fileSize=item.getSize(); if(fileExt==null||fileExt.equals("")||fileSize==0) out.print(count+" : <hr size=1>"); else { fileExtfileExt=fileExt.substring(fileExt.lastIndexOf("\\")+1); //取文件扩展名 File files=new File(path,fileExt); item.write(files); //以时间命名 out.print(count+" : "+files.getName()+"<hr size=1>"); response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show"); //out.print(fileExt); } } } }catch(Exception e){ out.print("Error!"); } } else if(request.getParameter("act").equals("downloadFile")) { strStat="downloadFile"; } else if(request.getParameter("act").equals("downloadFileDo")) { %>
关于“JSP后台文件管理源代码的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。