使用common-fileUpload制作文件上传【转】
前台页面不用多说 主要是表单中设置 enctype="multipart/form-data" 很重要。
处理上传jsp文件
//判断表单是否是Multipart类型的。这里可以直接对request进行判断 if (ServletFileUpload.isMultipartContent(request)) { // 创建文件处理工厂,它用于生成 FileItem 对象。 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置文件的缓存路径 String tempdir =this.getServletContext().getRealPath("/upload/temp"); java.io.File d = new java.io.File(savedir); if(!d.exists()){ d.mkdirs(); } factory.setSizeThreshold(1024*1024); // 设置最多只允许在内存中存储的数据,单位:字节 factory.setRepository(d); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录(默认可以不用设置) // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // 设置允许用户上传文件大小,单位:字节 upload.setSizeMax(yourMaxRequestSize); //上传文件,并解析出所有的表单字段,包括普通字段和文件字段 List items = upload.parseRequest(request); //下面对每个字段进行处理,分普通字段和文件字段 Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem) it.next(); //如果是普通字段 if(fileItem.isFormField()){ //是普通的字段 System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); fileItem.getFieldName();//得到字段name属性的值 fileItem.getName();//得到file字段的文件名全路径名,如果不是file字段,为null fileItem.getString();//得到该字段的值,默认的编码格式 fileItem.getString("UTF-8");//指定编码格式 }else{//文件字段 System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " +//得到file字段的文件名全路径名 fileItem.isInMemory() + " " +//用来判断FileItem类对象封装的主体内容是存储在内存中,还是存储在临时文件中,如果存储在内存中则返回true,否则返回false fileItem.getContentType() + " " +//文件类型 fileItem.getSize()); //文件大小 //什么东西都有了 ,想怎么处理都可以了 //保存文件,其实就是把缓存里的数据写到目标路径下 if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File("c:/temp/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("文件没有选择 或 文件内容为空"); }