jsp的文件上传

字体大小: 中小 标准 ->行高大小: 标准
javax.servlet.ServletException: BeanUtils.populate
 org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
 org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 这个错误可能是因为ActionForm中的字段是Date类型的,而前台使用的是一个普通的字符串,所以当Action使用BeanUtils.populate进行转换时,会发生这个错误,同样的错误可能还有其它的对象类型也会出现。
  javax.servlet.ServletException: BeanUtils.populate   
在做文件上传的时候遇到这个异常:javax.servlet.ServletException: BeanUtils.populate
 
解决:在<html:form action="" method="">中加上 enctype="multipart/form-data"的定义
 
<html:form  action="" method="post" enctype="multipart/form-data">
 

public class FileUploadAction extends Action {
 
 public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
   FileUploadForm fileUploadForm = (FileUploadForm) form;// TODO Auto-generated method stub
   ActionErrors errors=new ActionErrors();
   //存储当前servlet的全路径,然后在其路径上加上/file/'ZH',是为了给用户定位文件存储的物理路径
   String dir=this.getServlet().getServletContext().getRealPath("/images");
   FileUploadForm fileUpload=(FileUploadForm)form;//读取用户的上传文件
   FormFile file=fileUpload.getFile();
   if(file==null)
   {
    errors.add("fail",new ActionError("upload fail"));
    return (mapping.findForward("error"));
   }
   String fname=file.getFileName();
   float silesize=(float)(file.getFileSize()/1024.0);//读取文件大小
   
   
   InputStream streamIn=null; //定义输入流的引用
   OutputStream streamOut=null; //定义输出流的引用
   try
   {
    streamIn=file.getInputStream(); //获取文件流
    streamOut=new FileOutputStream(dir+"/"+fname); //新建输出流对象
    int bytesRead=0;
    byte[] buffer=new byte[8192];
    //开始保存文件
    while((bytesRead=streamIn.read(buffer,0,8192))!=-1)
    {
     //把读取进来的数据保存到缓冲区,然后再输出到文件中
     streamOut.write(buffer,0,bytesRead);
    }
   }
   catch(Exception e)
   {
    return (mapping.findForward("error"));
   }
   file.destroy(); //释放被读取的文件
   return (mapping.findForward("success"));
   
  }

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/69118.html