SpringMVC day02 JavaWeb文件上传 及 文件名称出错解决

JavaWeb文件上传

  1. 导入相关pom坐标
<dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.18.1</version>
    </dependency>
  1. 作为最基础的文件上传方式,不使用SpringMVC框架,按照如下步骤撰写相关代码
		//1.确定上传的位置,Web项目中使用request传输文件
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //path即为上传文件存储位置
        System.out.println(path);
        //1.1判断路径是否存在
        File file = new File(path);
        if (!file.exists()){
     
            //1.2文件不存在,创建文件
            file.mkdirs();
        }

        //2.解析request对象,获取上传文件
        //2.1 创建磁盘文件项工厂 
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2.2 创建上传文件对象
        ServletFileUpload upload = new ServletFileUpload(factory);
        //2.3 解析request内存出的文件对象
        List<FileItem> items = upload.parseRequest(request);

        //遍历
        for (FileItem item : items) {
     
            //进行判断 是否是上传文件项
            if (item.isFormField()){
     
                //是表单项
            }else {
     
                String name = item.getName();
                String uuid = UUID.randomUUID().toString().replace("-", "");
                name = uuid + "_" + name;
                //完成文件上传
                item.write(new File(path,name));
                //删除文件,更新内存
                item.delete();
            }
        }

使用SpringMVC框架完成文件上传

使用SpringMVC框架简化了解析request的步骤,只需完成如上中定义存储路径等步骤

  • 配置springmvc.xml中相关解析器

注意:该bean标签id属性只能为multipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
  • 撰写相关后台代码
	    //1.确定上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        System.out.println(path);
        //1.1判断路径是否存在
        File file = new File(path);
        if (!file.exists()){
     
            //创建文件
            file.mkdirs();
        }

        //2.读取request解析后的文件,存储的位置是tomcat的位置
        String fileName = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        //2.1避免覆盖 解决文件名出错,可进行+uuid设置
        fileName = uuid+fileName ;
        upload.transferTo(new File(file,fileName));
        return "success";

注意

  • 当显示文件名称出错等问题时,且为了避免出现文件覆盖等问题,可设置唯一Uuid,当设置唯一标识后,文件即读取成功。
  • 可尝试换一浏览器进行文件上传,上传都在request中,使用EE浏览器上传出错,出现文件读取失败,但谷歌浏览器上传成功。
  • 使用tomcat启动服务器时,极易产生404错误,当显示该线程已经被占用时,换其他HTTP port仍显示404错误,重启电脑后,服务器启动成功,跳转首页。

你可能感兴趣的:(tomcat,java,spring,web)