java 文件上传

使用 ApacheCommons FileUpload 组件

 

1、commons-io-1.4.jarcommons-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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值