程序员

Java Web关于文件上传知识点

2018-08-13  本文已影响17人  LeaveStyle

这里针对表单注册功能的关于文件上传方面做了一些总结,前段代码并未打出。

前提(这个给它设置load-on-startup值让它自启动)

//用户注册的初始化的Servlet
public class InitServelet extends HttpServlet{
    //创建一个List集合用于保存用户注册的信息:
    List<User> list = new ArrayList<User>();
    //将list保存到ServletContext作用域中:
    this.getServletContext().setAttribute("list", list);
}

前段(JSP)文件上传的基本要素

后端(Servlet)

文件数据的接收(需要commons-io.jar和commons-fileupload.jar)文件上传基本操作:
//里面FileItem是一个bean
try {
    //定义一个Map集合用于保存接收到的数据
    Map<String, String> map = new HashMap<String, String>();
    //1. 创建一个磁盘文件项工厂对象DiskFileItemFactory
    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory()
    //2. 创建一个核心解析类
    ServletFileUpLoad servletFileUpload = new ServletFileUpload(diskFileItemFactory);
    //3.解析request请求
    List<FileItem> list = servletFileUpload.parseRequest(request);
    //定一个List集合,用于保存复选框这种类型的多个数据,这里比如爱好(hobby)
    List<String> hobbyList = new ArrayList<String>();
    //设置文件最终的路径
    String url = null;
    //4.遍历集合,获得每个FileItem,判断是表单项还是文件上传项
    for(FileItem fileItem :list){
        //判断是表单项还是文件上传项
        if(fileItem.isFormField()){
           //普通表单项:
          //接受表单项参数的值:
          String name = fileItem.getFiledItem();//获得表单项的name属性的值
          String value = fileItem.getString("UTF-8");//获得表单项的值
          //接受复选框的数据,这里以名称为"hobby"为例
          if("hobby".equals(name)){
              String hobbyValue = fileItem.getString("UTF-8");
              //接收到一个值,将这个值存入hobbyList集合中
              hobbyList.add(hobbyValue);
              //将[xxx,xxx]的[]去掉
              hobbyValue = hobbyList.toString().subSequence(1, hobby.toString().length()-1);
              //将爱好的数据存入到Map集合中:
              map.put(name, hobbyValue);
          } else{
              // 将数据存入Map集合中
              map.put(name, value);
          }
        } else{
             //获得文件上传的名称
            String fileName = fileItem.getName();
            if(fileName != null && !"".equals(fileName)){
                // 文件上传项
                //文件上传功能
                //在WebContext新建一个upload文件夹,假设放到那里
                //通过工具类获得唯一的文件名
                String uuidFileName = UploadUtils.getUUIDFileName(fileName);
                //获得文件上传数据
                InputStream is = fileItem.getInputItem();
                //获得文件上传的路径
                String path = this.getServletContext().getRealPath("/upload");
                //将输入流对接到输出流就可以了:
                url = path + "\\" +uuidFileName;
                OutputStream os = new FileOutputStream(url);
                //固定代码
                int len = 0;
                byte[] b = new byte[1024];
                while((len = is.read(b)) != -1){
                    os.write(b, 0, len);
                }
                is.close();
                os.close();
            }
        }
    }
    //获得ServletContext对象:
    List<User> userList = (List<User>)this.getServeltContext().getAttribute("list");
    //校验用户名
    for(User u : userList){
        if(u.getUserName().equals(map.get("username"))){
            request.setAttribute("msg", "用户名已经存在!");
            request.getRequestDispatcher("/regist.jsp").forward(request, response);
  
        }
    }
    //将数据封装到User当中
    User user = new User();
    user.setUsername(map.get("username"));
    user.setPassword(map.get("password"));
    user.setSex(map.get("sex"));
    user.setHobby(map.get("hobby"));
    user.setPath(url);
    //将注册用户的信息存入到List集合中:
    userList.add(user);
    this.getServletContext().setAttribute("list", userList);

    //注册成功,跳转到登录页面
    request.getSession().setAttribute("username", user.getUsername());
    //注意重定向一定要写全项目路径    
    response.sendRedirect(request.getContextPath()+"/login.jsp");
} catch(FileUploadException e){
  e.printStackTrace();
}

文件上传工具类

//文件上传工具类
public class UploadUtils{
    //生成唯一的文件名
    public static String getUUIDFileName(String fileName){
        //将文件名前面的部分进行截取:x x.jpg    ---->      .jpg
        int idx = fileName.lastIndexOf(".");
        String extension = fileName.substring(idx);
        String uuidFileName = UUID.randomUUID().toString.replace("-", "")+extention;
        return uuidFileName;
    }
}

登陆页面显示用户信息(jsp)

<%
    String username = "";
    if(session.getAttribute("username") != null){
        username = (String)session.getAttribute("username")
    }
%>
上一篇 下一篇

猜你喜欢

热点阅读