读书人

java 资料上传

发布时间: 2013-03-26 09:54:34 作者: rapoo

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>

?

读书人网 >编程

热点推荐