JSP后台文件管理源代码(转载)


  完整文档见:http://www.docin.com/p-7164411.html  

  一直关注基于web的大文件传输的实现,尝试用VB写AcitveX控件在客户端执行FTP登录及上传下载。在win2000下可运行,但好像在Winxp sp2下普遍会被拦截,实现数字签名也枉然。


突然于5号网上找到个好东东介绍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;
  newstring=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;
  newstring=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();
  }

  path=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
  {
  fileExt=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"))
{
%>
  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值