美文网首页程序员
Java Web关于文件上传知识点

Java Web关于文件上传知识点

作者: LeaveStyle | 来源:发表于2018-08-13 00:35 被阅读17次

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

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

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

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

  • 表单必须是post提交方式
  • 表单中的必须有文件上传项,文件上传项必须有name属性和值
  • 表单的enctype属性必须设置为multipart/form-data

后端(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")
    }
%>

相关文章

  • Java Web关于文件上传知识点

    这里针对表单注册功能的关于文件上传方面做了一些总结,前段代码并未打出。 前提(这个给它设置load-on-star...

  • Java Web文件上传展示进度

    1、文件上传演示准备 接前面“Java Web中的文件上传和下载” 为了演示文件上传,先新增一个用于接收文件上传的...

  • Java Web中的文件上传和下载

    这里主要结合代码说明Java Web中文件上传和下载的机制。 1、文件上传示例说明 这里从一个文件上传的例子,看下...

  • 文件上传与下载(一)简单实现

    在慕课找到了一节关于java Web上传、下载问题的内容。内容总体包括: Jsp + Servlet 简单实现文件...

  • java web文件上传

    什么是文件上传 为什么使用文件上传 文件上传原理分析 上传文件注意事项 1,请求方式必须是post. 2,需要使用...

  • SpringBoot | 第十八章:web应用开发之WebJar

    前言 前面一章节我们主要讲解了关于文件上传的两种方式。本章节继续web开发的相关知识点。通常对于web开发而言,像...

  • 文件上传与下载

    文件上传和下载 文件上传和下载是JAVA WEB中常见的一种操作,文件上传主要是将文件通过IO流传输到服务器的某一...

  • java 视频教程

    java知识点解析揭秘酷炫的Java文件上传技术 http://yun.itheima.com/open/38....

  • Spring MVC的文件上传

    概述 文件上传是Java Web项目中的常用功能,未达到上传文件的目的,需进行下列步骤: 表单的method属性必...

  • Php与Web交互

    简单是可靠的先决条件——Edsger Dijkstra 本篇文章主要知识点 Php与Web交互基本 文件上传 表单...

网友评论

    本文标题:Java Web关于文件上传知识点

    本文链接:https://www.haomeiwen.com/subject/htpebftx.html