java 文件上传
使用 Apache的Commons FileUpload 组件
?
1、commons-io-1.4.jar及commons-io-1.2.1.jar包导入到工程中
//必须是multipart的表单数据。 <form name="myform" action="demo1.jsp" method="post" enctype="multipart/form-data"> Your name: <br> <input type="text" name="name" size="15"><br> File:<br> <input type="file" name="myfile"><br> <br> <input type="submit" name="submit" value="Commit"> </form>
?
?
?
//产生一个磁盘文件项的工厂对象 DiskFileItemFactory factory=new DiskFileItemFactory(); //通过工厂对象获得一个文件上传的对象 ServletFileUpload upload=new ServletFileUpload(factory); //解析request请求中的参数,获得的所有请求参数,并且将请求的参数存放到一个list集合中,list集合中的每一个值都是一个体FileItem类型的对象 List list=upload.parseRequest(request); for(int i=0;i<list.size();i++){ FileItem item=(FileItem)list.get(i); //循环读取出每个参数 //判断当前的这个item是一个普通的表单元素,还是一个文件域元素 true表明这是一个普通的表单元素 false 表示这个item是一个文件域 if(!item.isFormField()){ // //判断这是不是一个空值 if(item.getName()!=null&& !item.getName().equals("")){ System.out.println("上传文件的大小为:"+item.getSize()); System.out.println("上传文件的类型为:"+item.getContentType()); System.out.println("上传文件的名字为:"+item.getName()); //下面开始真正的保存到Tomcat服务器对应站点的目录images下 File file=new File(item.getName()); //真正保存上传图片的文件 File realFile=new File(pageContext.getServletContext().getRealPath("/")+"images",file.getName()); System.out.println("上传文件的名字为:"+file.getName()); System.out.println("最后保存到的服务器的路径为:"+realFile); //写入到服务器磁盘中 item.write(realFile);?
?
第二种方法:
String uploadPath="D:\\temp"; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart==true){ try{ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request);//得到所有的文件 Iterator<FileItem> itr = items.iterator(); while(itr.hasNext()){//依次处理每个文件 FileItem item=(FileItem)itr.next(); if (!item.isFormField()) { String fileName=item.getName();//获得文件名,包括路径 if(fileName!=null){ File fullFile=new File(item.getName()); File savedFile=new File(uploadPath,fullFile.getName()); item.write(savedFile); } } } out.print("upload succeed"); } catch(Exception e){ e.printStackTrace(); } } else{ out.println("the enctype must be multipart/form-data"); }?
上传一个文件到指定的目录,并限定文件大小。
File uploadPath = new File("D:\\temp");//上传文件目录 if (!uploadPath.exists()) { uploadPath.mkdirs(); } // 临时文件目录 File tempPathFile = new File("d:\\temp\\buffer\"); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);//设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List<FileItem> items = upload.parseRequest(request);//得到所有的文件 Iterator<FileItem> i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if ( !fi.isFormField()&&fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile .getName()); fi.write(savedFile); } } out.print("upload succeed"); } catch (Exception e) { e.printStackTrace(); }??
?
?
?struts1.x 的上传:
??
private void upload(ActionContext context, DynaValidatorForm frm,) {Hashtable files = frm.getMultipartRequestHandler().getFileElements();java.util.Enumeration enum = files.keys();String fname = "";while (enum.hasMoreElements()) {fname = (String) enum.nextElement();FormFile ff = (FormFile) files.get(fname);if (!(ff == null || ff.getFileSize() == 0|| ff.getFileName() == null || ff.getFileName().equals(""))) {try {Calendar cal = Calendar.getInstance(); String fileName = ff.getFileName()+String.valueOf(cal.getTimeInMillis());InputStream stream = ff.getInputStream();String filePath = context.getRequest().getRealPath("/"); //取当前系统路径//建立一个上传文件 的输出流,将上传文件存入web的根目录OutputStream bos = new FileOutputStream(filePath + "zjh/"+ fileName);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {bos.write(buffer, 0, bytesRead);//将文件写入服务器 }bos.close();stream.close();} catch (Exception fnfe) {fnfe.printStackTrace(System.out);}}}?
? struts.xml 文件:
?
<form-bean name="zjhDownLoadForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="saction" type="java.lang.String"></form-property><form-property name="ZJH_DOWNLOAD"type="org.apache.struts.upload.FormFile" /></form-bean>
?