自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

分析JSP后臺文件管理源代碼

開發(fā) 后端
本文將分析JSP后臺文件管理源代碼,一直關(guān)注基于Web的大文件傳輸?shù)膶崿F(xiàn),嘗試用VB寫AcitveX控件在客戶端執(zhí)行FTP登錄及上傳下載。不過后來還是發(fā)現(xiàn)用JSP的方法比較好一些。

在網(wǎng)上找到個好東東介紹實現(xiàn)JSP后臺文件管理的,就是Web端瀏覽器實現(xiàn)類似文件管理的功能(多了上傳文件)。有源代碼提供,就是寫得亂了點。經(jīng)整理改進,增加了文件下載功能,以及對大文件上傳的支持(用commons.fileupload包,解決了smartupload包傳輸大文件就報錯的Bug)。不過還沒改下載(有時間改過來)?,F(xiàn)在與大家分享一下,歡迎大家給出建議。

  1. <%-- 根據(jù)oddWorld 網(wǎng)站文件管理系統(tǒng)(簡體中文版)修改  
  2.   copy right by joard Ast,kliis   
  3.   admin.jsp 功能:網(wǎng)站文件后臺管理頁面。  
  4.   admin.jsp 特點:單頁面實現(xiàn)服務(wù)器后臺文件的各項管理  
  5.   轉(zhuǎn)載敬請注明出處!  
  6. --%> 
  7.   <%@ page contentType="text/html;charset=gb2312" %> 
  8. <%@ page import="java.io.*" %> 
  9. <%@ page import="org.apache.commons.fileupload.*" %> 
  10. <%@ page import="java.util.Date" %> 
  11. <%@ page import="java.util.*" %> 
  12. <%@ page import="com.jspsmart.upload.SmartUpload" %> 
  13. <%@ page import="javax.servlet.http.HttpSession" %> 
  14. <%@ page import="javax.servlet.http.HttpServletRequest" %> 
  15. <%@ page import="java.lang.reflect.*" %> 
  16.  
  17. <% //中文字符轉(zhuǎn)換%> 
  18. <%!  
  19. public static String UnicodeToChinese(String s)  
  20. {  
  21.   try{  
  22.   if(s==null || s.equals("")) return "";  
  23.   String newstring=null;  
  24.   newnewstring=new String(s.getBytes("ISO8859_1"),"gb2312");  
  25.   return newstring;  
  26.   }  
  27.   catch(UnsupportedEncodingException e)  
  28.   {  
  29.   return s;  
  30.   }  
  31. }  
  32.  
  33. public static String ChineseToUnicode(String s)  
  34. {  
  35.   try  
  36.   {  
  37.   if(s==null||s.equals("")) return "";  
  38.   String newstring=null;  
  39.   newnewstring=new String(s.getBytes("gb2312"),"ISO8859_1");  
  40.   return newstring;  
  41.   }  
  42.   catch(UnsupportedEncodingException e)  
  43.   {  
  44.   return s;  
  45.   }  
  46. }  
  47.  
  48. public String getTime(String formats)  
  49.   {    
  50.   //取得自定義格式的時間 ("yyyyMM") ("yyyy_MM_dd_HHmmssSSS") 大S為毫秒 HH為24小時制,hh為12小時制  
  51.   return new java.text.SimpleDateFormat(formats).format(java.util.Calendar.getInstance().getTime());  
  52.   }  
  53. %> 
  54.  
  55. <%  
  56. //刷新問題  
  57. response.setHeader("Pragma","No-cache");   
  58. response.setHeader("Cache-Control","no-cache");   
  59. response.setDateHeader("Expires", 0);  
  60.  
  61. //自定義登陸用密碼和用戶名  
  62.  
  63. //正確的用戶名,可以另外添加連接數(shù)據(jù)庫  
  64. String username="admin";  
  65.  
  66. //正確的密碼  
  67. String userpass="admin";  
  68.  
  69. //得到系統(tǒng)路徑,路徑得到后加一杠,表示文件夾下  
  70. ServletContext app=(ServletContext)pageContext.getServletContext();  
  71. String strSysPath = app.getRealPath("/");  
  72.  
  73.  
  74. //處理對象物理路徑  
  75. String strDealPath="";  
  76.  
  77. //顯示錯誤信息  
  78. String strErr="";  
  79.  
  80. //代表頁面的顯示狀態(tài)  
  81. //login 是顯示登陸頁面  
  82. //show 是正常的顯示文件信息;  
  83. //edit 是顯示編輯文件的頁面;  
  84. //editDo是編輯文件的寫入操作  
  85. //createF 是顯示創(chuàng)建文件夾的頁面;  
  86. //createFDo 是創(chuàng)建文件夾的操作;  
  87. //renameFold 是顯示更改文件夾名稱的頁面;  
  88. //renameFoldDo是更改文件夾名稱的操作;  
  89. //delFoldDo 是刪除文件夾的操作;  
  90. //renameFile 是顯示更改文件名稱的頁面;  
  91. //renameFileDo 是更改文件名稱的操作;  
  92. //delFileDo 是刪除文件的操作;  
  93. //uploadFile 是顯示上傳文件的頁面;  
  94. //uploadFileDo 是上傳文件的操作;  
  95.  
  96. //添加的功能 uploadFile是顯示下載文件的頁面  
  97. //uploadFileDo是下載文件的操作  
  98.  
  99. String strStat="login";  
  100. //用于show 狀態(tài)下顯示文件的數(shù)組  
  101.  
  102. File[] fileArr=null;  
  103. //根據(jù)傳遞的路徑參數(shù)得到要處理對象的物理路徑  
  104.  
  105. if (request.getParameter("path")==null || request.getParameter("path").equals(""))  
  106. {  
  107.   strDealPath=strSysPath;  
  108.   //如果從網(wǎng)頁傳來的路徑為空,則默認采用  
  109. }  
  110. else  
  111. {  
  112.   //得到路徑參數(shù)  
  113.   strDealPath=UnicodeToChinese(request.getParameter("path"));  
  114. }  
  115. //檢查session 的值是否存在,如果不存在著顯示錯誤信息  
  116. //HttpSession session = request.getSession(false);  
  117.  
  118. if (session.getValue("loginIn")==null || !session.getValue("loginIn").equals("pass"))  
  119. {   
  120.   strStat="login";  
  121.   strErr="你還沒有登陸或者登陸超時,請重新登陸!";  
  122. }  
  123.  
  124. //創(chuàng)建file 對象,檢查目錄是否存在  
  125. File myFile=new File(strDealPath);  
  126.  
  127. //檢驗文件夾是否存在   
  128. if(!myFile.exists())  
  129. {  
  130.   strErr="你選擇的文件夾不存在,請重新選擇!";  
  131. }  
  132. //根據(jù)參數(shù)的不同,進行對應(yīng)的操作  
  133. if(request.getParameter("act")==null ||   
  134.   request.getParameter("act").equals("") ||   
  135.   request.getParameter("act").equals("login")  
  136.   )  
  137. {  
  138.   if(request.getParameter("username")!=null && request.getParameter("userpass")!=null)  
  139.   {  
  140.  
  141.   //正確的經(jīng)過MD5 加密的密碼  
  142.   //String userpass="OEEO99107DC8C1EE2E06666B965601EF";  
  143.  
  144.   if( request.getParameter("username").equals(username)   
  145.   && (request.getParameter("userpass")).equals(userpass)  
  146.   )  
  147.   {  
  148.   session.putValue("loginIn","pass");  
  149.   response.sendRedirect(request.getRequestURI()+"?act=show");  
  150.   }  
  151.   }   
  152.   else  
  153.   {  
  154.   strStat="login";  
  155.   strErr="你還沒有登陸或者登陸超時,請重新登陸!";  
  156.   }  
  157. }  
  158. else if(request.getParameter("act").equals("show"))  
  159. {  
  160.   //缺省,頁面正常顯示文件的信息 statStat="show" 
  161.   strStat="show";  
  162.  
  163.   //創(chuàng)建文件列表數(shù)組  
  164.   fileArr=myFile.listFiles();  
  165.  
  166. }  
  167. else if(request.getParameter("act").equals("edit"))  
  168. {  
  169.   //編輯文件內(nèi)容的頁面  
  170.   //根據(jù)是否有request.getParameter("file")  
  171.   //以及相應(yīng)文件是否存在,如果有,則進行編輯操作,如果沒有,則顯示錯誤提示信息  
  172.      
  173.   if (!(request.getParameter("file")==null || request.getParameter("file").equals("")))  
  174.   {  
  175.  
  176.   File fileEditnew File(UnicodeToChinese(request.getParameter("path"))  
  177.   +UnicodeToChinese(request.getParameter("file")));  
  178.      
  179.   if(fileEdit.exists())  
  180.   //文件編輯操作,實際就是更改頁面的顯示,用一個textarea 顯示文件的信息,來做編輯  
  181.   strStat="edit";  
  182.   else   
  183.   //顯示錯誤信息  
  184.   strErr="你選擇的文件不存在,請重新選擇!";  
  185.      
  186.   }else  
  187.   {  
  188.   strErr="你沒有選擇要編輯的文件,請重新選擇!";  
  189.   }  
  190. }else if(request.getParameter("act").equals("editDo"))  
  191. {  
  192.   //把修改的內(nèi)容寫入文件,并且返回修改頁面  
  193.   if (!(request.getParameter("file")==null || request.getParameter("file").equals("")))  
  194.   {   
  195.   File fileEditnew File(UnicodeToChinese(request.getParameter("path"))  
  196.   +UnicodeToChinese(request.getParameter("file")));  
  197.  
  198.   if(fileEdit.exists())  
  199.   {   
  200.   //文件編輯操作,實際就是在修改文件內(nèi)容以后,再于頁面上用一個textarea 顯示文件的內(nèi)容,  
  201.   //繼續(xù)來做編輯或者查看修改的效果  
  202.   if(!(request.getParameter("fileData")==null))  
  203.   {   
  204.   try{  
  205.   PrintWriter pwEdit =null;  
  206.      
  207.   pwEdit=new PrintWriter(new FileOutputStream(UnicodeToChinese(request.getParameter("path"))  
  208.   +UnicodeToChinese(request.getParameter("file"))));  
  209.      
  210.   pwEdit.println(UnicodeToChinese(request.getParameter("fileData")));  
  211.   pwEdit.close();  
  212.      
  213.   response.sendRedirect(request.getRequestURI()+"?path="+   
  214.   UnicodeToChinese(request.getParameter("path")) +"&file="+UnicodeToChinese(request.getParameter("file")) +"&act=edit");   
  215.   return;  
  216.   }catch(Exception e)  
  217.   {  
  218.   strErr="文件寫入錯誤,請重新選擇!";  
  219.   }  
  220.   }   
  221.   else  
  222.   {  
  223.   strErr="缺少修改文件內(nèi)容的參數(shù),請重新選擇!";  
  224.   }  
  225.   }else   
  226.   //顯示錯誤信息  
  227.   strErr="你選擇的文件不存在,請重新選擇!";  
  228.   }else  
  229.   {  
  230.   strErr="你沒有選擇要編輯的文件,請重新選擇!";  
  231.   }  
  232. }else if(request.getParameter("act").equals("createF"))  
  233. {  
  234.   //創(chuàng)建新的文件夾的頁面顯示  
  235.   strStat="createF";  
  236. }else if(request.getParameter("act").equals("createFDo"))  
  237. {  
  238.   //創(chuàng)建新的文件夾  
  239.   String strFoldName=strDealPath+UnicodeToChinese(request.getParameter("foldName")).trim()+"\\";  
  240.   //out.println(strFoldName);  
  241.   //out.close();  
  242.   File fileCreateF=new File(strFoldName);  
  243.  
  244.   if(!fileCreateF.exists())  
  245.   {  
  246.   try{  
  247.   fileCreateF.mkdir();  
  248.   response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");   
  249.   return;  
  250.   }catch(Exception e)  
  251.   {   
  252.   strErr="創(chuàng)建新文件夾失敗!";  
  253.   }  
  254.   }  
  255.   else  
  256.   {   
  257.   strErr="指定的文件夾名稱和現(xiàn)有的文件夾名稱重復(fù),請重新指定一個新的文件夾名稱!";  
  258.   }  
  259. }  
  260.  
  261. else if(request.getParameter("act").equals("delFoldDo"))  
  262. {  
  263.   //刪除操作  
  264.   try{  
  265.   String strFileDelF=strDealPath+UnicodeToChinese(request.getParameter("fold"))+"\\";  
  266.   File fileDelF=new File(strFileDelF);  
  267.  
  268.   if(fileDelF.exists())  
  269.   {  
  270.   File[] fileArrCheck=fileDelF.listFiles();  
  271.   if(!(fileArrCheck.length>0))  
  272.   {  
  273.   fileDelF.delete();  
  274.   response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");   
  275.   return;  
  276.   }else  
  277.   {  
  278.   strErr="文件夾下面還包含著文件,請把文件都刪除,再刪除文件夾";  
  279.   }  
  280.   }else  
  281.   {  
  282.   strErr="要刪除的文件夾不存在,請重新選擇";  
  283.   }  
  284.   }catch(Exception e)  
  285.   {  
  286.   strErr="文件夾刪除操作錯誤!";  
  287.   }  
  288. }  
  289.  
  290.  
  291. else if(request.getParameter("act").equals("renameFold"))  
  292. {  
  293.   strStat="renameFold";  
  294. }  
  295.  
  296. else if(request.getParameter("act").equals("renameFoldDo"))  
  297. {  
  298.   //文件夾更名操作  
  299.   //根據(jù)參數(shù)判斷是否對于文件夾名稱有更改動作發(fā)生  
  300.   if(request.getParameter("changeDo").equals("true"))  
  301.   {  
  302.   //有文件名,更名發(fā)生  
  303.   try{  
  304.   String strFileRenameF=strDealPath+UnicodeToChinese(request.getParameter("fold"))+"\\";  
  305.   File fileRenameF=new File(strFileRenameF);  
  306.      
  307.   //先用strFileRenameF獲得當前的文件路徑  
  308.   String strFileRenameToF=strDealPath+UnicodeToChinese(request.getParameter("newFoldName"))+"\\";  
  309.      
  310.   File fileRenameToF=new File(strFileRenameToF);  
  311.  
  312.   //判斷更名的文件夾是否存在  
  313.   if(fileRenameF.exists())  
  314.   {  
  315.   //判斷新的文件夾名稱是否與現(xiàn)存的文件夾重名  
  316.   if(!fileRenameToF.exists())  
  317.   {  
  318.   fileRenameF.renameTo(fileRenameToF);  
  319.   response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");   
  320.   return;  
  321.   }else  
  322.   {  
  323.   strErr="指定的文件夾名稱和現(xiàn)有的文件夾名稱重復(fù),請重新指定一個文件夾名稱!";  
  324.   }  
  325.   }else  
  326.   {  
  327.   strErr="要更名的文件夾不存在,請重新選擇";  
  328.   }  
  329.  
  330.   }catch(Exception e)  
  331.   {  
  332.   strErr="文件夾更名操作錯誤!";  
  333.   }  
  334. }  
  335. }  
  336.  
  337. else if(request.getParameter("act").equals("renameFile"))  
  338. {  
  339.   strStat="renameFile";  
  340. }  
  341.  
  342. else if(request.getParameter("act").equals("renameFileDo"))  
  343. {  
  344.   //文件更名操作  
  345.   //根據(jù)參數(shù)判斷是否對于文件名稱有更改動作發(fā)生  
  346.   if(request.getParameter("changeDo").equals("true"))  
  347.   {  
  348.   //有文件名,更名發(fā)生  
  349.   try{  
  350.   String strFileRenameFi=strDealPath+UnicodeToChinese(request.getParameter("file"));  
  351.   File fileRenameFi=new File(strFileRenameFi);  
  352.      
  353.   String strFileRenameToFi=strDealPath+UnicodeToChinese(request.getParameter("newFileName"));  
  354.   File fileRenameToFi=new File(strFileRenameToFi);  
  355.      
  356.   //判斷更名的文件是否存在  
  357.   if(fileRenameFi.exists())  
  358.   {  
  359.   //判斷新的文件名稱是否與現(xiàn)存的文件重名  
  360.   if(!fileRenameToFi.exists())  
  361.   {  
  362.   fileRenameFi.renameTo(fileRenameToFi);  
  363.   response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");   
  364.   return;  
  365.   }else  
  366.   {  
  367.   strErr="指定的文件名稱和現(xiàn)有的文件名稱重復(fù),請重新指定一個文件名稱!";  
  368.   }  
  369.   }else  
  370.   {  
  371.   strErr="要更名的文件不存在,請重新選擇";  
  372.   }  
  373.  
  374.   }catch(Exception e)  
  375.   {  
  376.   strErr="文件更名操作錯誤!";  
  377.   }   
  378.   }  
  379. }  
  380.  
  381. else if(request.getParameter("act").equals("delFileDo"))  
  382. {  
  383.   //刪除操作  
  384.   try{  
  385.   String strFileDelFi=strDealPath+UnicodeToChinese(request.getParameter("file"));  
  386.   File fileDelFi=new File(strFileDelFi);  
  387.  
  388.   if(fileDelFi.exists())  
  389.   {  
  390.   fileDelFi.delete();  
  391.   response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");   
  392.   return;  
  393.   }  
  394.   else  
  395.   {  
  396.   strErr="要刪除的文件不存在,請重新選擇";  
  397.   }  
  398.  
  399.   }catch(Exception e)  
  400.   {  
  401.   strErr="文件刪除操作錯誤!";  
  402.   }   
  403. }  
  404.  
  405. //上傳文件,用到smartupload組件  
  406. else if(request.getParameter("act").equals("uploadFile"))  
  407. {  
  408.   strStat="uploadFile";  
  409. }  
  410. else if(request.getParameter("act").equals("uploadFileDo"))  
  411. {  
  412. %> 
  413.  
  414. <%  
  415.   //上傳文件操作  
  416.   //mySmartUpload.initialize(pageContext);  
  417.   //mySmartUpload.setTotalMaxFileSize(100000000);  
  418.   //try   
  419.   //{  
  420.   // mySmartUpload.upload();  
  421.   // mySmartUpload.save(strDealPath);  
  422.  
  423.   // response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");   
  424.   // return;   
  425.   //} catch (Exception e)   
  426.   //{   
  427.   // strErr="文件上傳出錯,請檢查是否超過100M 的文件大小限制!";  
  428.   //}  
  429.      
  430.   //重新用commons.fileupload包傳輸文件  
  431.      
  432. %> 
  433.  
  434. <%  
  435.  
  436.   String type="upload";  
  437.  
  438.   String fileExt=null;  
  439.  
  440.   long fileSize=0;  
  441.  
  442.   int count=0;  
  443.  
  444.   String fileName=getTime("yyyyMMdd_HHmmssSSS");  
  445.  
  446.   String dateDir=getTime("yyyyMMdd")+"/";  
  447.  
  448.   String path=getServletContext().getRealPath("/")+type;  
  449.  
  450.   File dir=new File(path);  
  451.   if(!dir.exists())  
  452.   {   
  453.   dir.mkdir();  
  454.   }  
  455.  
  456.   pathpath=path+"/"+dateDir;    
  457.  
  458.   dir=new File(path);  
  459.      
  460.   if(!dir.exists())  
  461.   {   
  462.   dir.mkdir();  
  463.   }  
  464.   try{  
  465.  
  466.   DiskFileUpload fu=new DiskFileUpload();  
  467.  
  468.   fu.setSizeMax(1024*1024*500); // 設(shè)置允許用戶上傳文件大小,單位:字節(jié)  
  469.  
  470.   fu.setSizeThreshold(1024); // 設(shè)置最多只允許在內(nèi)存中存儲的數(shù)據(jù),單位:字節(jié)  
  471.  
  472.   fu.setRepositoryPath("C:\\");    
  473.   //設(shè)置一旦文件大小超過getSizeThreshold()的值時數(shù)據(jù)存放在硬盤的臨時文件夾  
  474.  
  475.   List fileItems=fu.parseRequest(request); //開始讀取上傳信息  
  476.  
  477.   Iterator iter=fileItems.iterator(); // 依次處理每個上傳的文件  
  478.  
  479.   while(iter.hasNext())   
  480.   {  
  481.      
  482.   FileItem item=(FileItem) iter.next();  
  483.  
  484.   if(!item.isFormField())  
  485.   {    
  486.   //判斷是否是文件框,忽略其他不是文件域的所有表單信息  
  487.   count++;  
  488.      
  489.   fileExt=item.getName();    
  490.   //取得文件名,是客戶端的文件路徑,暈  
  491.      
  492.   fileSize=item.getSize();  
  493.      
  494.   if(fileExt==null||fileExt.equals("")||fileSize==0)   
  495.      
  496.   out.print(count+" : <hr size=1>");   
  497.   else  
  498.   {  
  499.   fileExtfileExt=fileExt.substring(fileExt.lastIndexOf("\\")+1);    
  500.   //取文件擴展名  
  501.      
  502.   File files=new File(path,fileExt);  
  503.      
  504.   item.write(files);    
  505.   //以時間命名  
  506.      
  507.   out.print(count+" : "+files.getName()+"<hr size=1>");  
  508.   response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");  
  509.   //out.print(fileExt);  
  510.      
  511.   }  
  512.   }  
  513.      
  514. }  
  515.  
  516. }catch(Exception e){  
  517.   out.print("Error!");  
  518. }  
  519.  
  520. }  
  521. else if(request.getParameter("act").equals("downloadFile"))  
  522. {  
  523.   strStat="downloadFile";  
  524.      
  525.      
  526. }  
  527. else if(request.getParameter("act").equals("downloadFileDo"))  
  528. {  
  529. %> 
對JSP后臺文件管理源代碼的分析就講到這里。

【編輯推薦】

  1. 選擇JSP網(wǎng)站空間的三點注意事項
  2. 簡單搭建JSP動態(tài)網(wǎng)站運行環(huán)境
  3. MySQL手冊中查到的JSP中文亂碼解決方法
  4. JSP中文亂碼問題的描述及解決方法
  5. 實例說明JSP打印報表的方法
責任編輯:彭凡 來源: CSDN
相關(guān)推薦

2009-07-03 14:33:47

2011-02-23 14:54:58

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:39:27

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:26:01

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 15:21:06

FileZilla

2015-08-28 09:38:51

Linux源代碼分析工具

2018-05-25 14:16:55

NFS源代碼線程

2015-08-26 17:38:47

Linux源代碼

2013-03-06 09:56:21

2011-08-24 15:42:38

LUA源代碼

2020-02-24 09:25:33

代碼開發(fā)工具

2011-08-01 16:42:24

ibmdwNFS文件系統(tǒng)

2011-08-24 17:15:33

Lua源代碼文件

2012-03-06 16:01:04

項目管理
點贊
收藏

51CTO技術(shù)棧公眾號