文件上传-通过commons_FIleUpload实现

来源:互联网 发布:淘宝店铺装修大学教程 编辑:程序博客网 时间:2024/05/30 07:12

一、Commons-FileUpload

简介:

Apache提供的实现文件上传的组件;免费的、开源的。

组件特点:

  1. 使用简单:可以方便的嵌入到JSP页面中,缩写少量代码就可以完成文件上传功能。
  2. 能够全程控制上传内容。
  3. 能够对上传文件大小、类型进行控制。

FileItem接口:

  1. 封装表单元素的数据。(不同类型的表单元素分别对应一个FileItem对象)
  2. 具有对表单内容处理的方法。
    FileItemFactory接口:用于构建FileItem实例。
    DiskFileItemFactory类:是FileItemFactory接口实现类。
    FileItemFactory factory= new DiskFileItemFactory();
    ServletFileUpload类:
    1.组件的核心类。
    2.封装表单元素并以集合方式返回。
    3.语法: public ServletFileUpload(FileItemFactory fileitemfactory)

这里写图片描述
二、.准备jar包
commons-fileupload.jar
commons-io.jar
三、 form表单

//文件:add_news.jsp//表单里enctype="multipart/form-data"代表的是(文本、文件)多重提交//必须 method=”post” ,如果get,地址栏里文件参数会非常非常长<form action="../util/do_add_news.jsp" method="post" enctype="multipart/form-data" onsubmit="return check()">  
// input的type=”file”意味着文件上传框<input name="file" type="file" class="opt_input" />

4.多重提交的处理

//文件:do_add_news.jsp提交的时候,要判断哪个参数是文件,哪个参数是文本   如果是文本,直接向数据库保存就可以了   如果是文件,要获得文件本身,上传到服务器中<%NewsService ns=new NewsService();News news=new News();request.setCharacterEncoding("utf-8");//判断提交的表单是否包含上传文件的清单boolean isMultiPart=ServletFileUpload.isMultipartContent(request);String uname="";int age=0;if(isMultiPart){    //如果是多重提交,获取全部表单元素的list    FileItemFactory ff= new DiskFileItemFactory();    ServletFileUpload sfu=new ServletFileUpload(ff);    List<FileItem> itemList=sfu.parseRequest(request);    Iterator<FileItem> it=itemList.iterator();    //遍历表单元素    while(it.hasNext()){        FileItem item=it.next();        //如果是文本的话,封装到对象内        if(item.isFormField()){            if(item.getFieldName().equals("ntid")){                int ntid=Integer.parseInt(item.getString("utf-8"));                news.setNtid(ntid);            }            if(item.getFieldName().equals("ntitle")){                news.setNtitle(item.getString("utf-8"));            }            if(item.getFieldName().equals("nauthor")){                news.setNauthor(item.getString("utf-8"));            }            if(item.getFieldName().equals("nsummary")){                news.setNsummary(item.getString("utf-8"));            }            if(item.getFieldName().equals("ncontent")){                news.setNcontent(item.getString("utf-8"));            }            if(item.getFieldName().equals("npicpath")){                news.setNpicpath(item.getString("utf-8"));            }                           }else{            //如果是非文本(即文件),则获取文件名字并保存文件到服务器            String fileName=item.getName();            String savePath=request.getSession().getServletContext().getRealPath("/upload");            news.setNpicpath(fileName);            File fileSave= ictures\Sample Pictures\Chrysanthemum.jpgnew File(savePath,fileName);            System.out.println(fileName);            System.out.println(savePath);            item.write(fileSave);        }    }}news.setNcreatedate("2016-12-01 10:36");news.setNmodifydate("2016-12-01 10:36");int result=ns.addNews(news);//response.sendRedirect("../newspages/admin.jsp");%>  

5.隐患
用IE浏览器提交文件,fileName会带上路径,路径含有“/”因此注定不能保存在服务器。可以提前对fileName进行判断,如果含有“/”,将最后一个“/”之前的部分截去,保留文件名部分。

0 0
原创粉丝点击