找回密码
赶紧注册吧

QQ登录

只需一步,快速开始

当前位置: 交友网 > 技能必杀技 > 生活技能分享 >

jsp文件上传如何规定大小

文章地址: http://www.tflove.com/jineng_sh/a22463.html
文章摘要:
这是jspsmartupload自身一个缺点!用jspsmartupload上传货色, JSP中,如何从session中取值和存值? ,当大小超过了某个值后就无奈上传了.也就报出了以下异样:java.lang.OutOfMemoryError: Java heap space假如是上传小的东西,用这个jspsmartupload这个组件足够了, jsp submit提交,如何更新浏览器地址 ,然而上传大的文件就不行了.倡议用commonupload组件.究其起因在jspsmartupload源码中有:m_
时间:2013-09-20 22:46来源:未知 作者:admin 点击: 次 《jsp文件上传如何规定大小
这是jspsmartupload自身一个缺点!用jspsmartupload上传货色,JSP中,如何从session中取值和存值?,当大小超过了某个值后就无奈上传了.也就报出了以下异样:java.lang.OutOfMemoryError: Java heap space假如是上传小的东西,用这个jspsmartupload这个组件足够了,jsp submit提交,如何更新浏览器地址,然而上传大的文件就不行了.倡议用commonupload组件.究其起因在jspsmartupload源码中有:m_totalBytes = m_request.getContentLength();m_binArray = new byte[m_totalBytes];int j;for(; i < m_totalBytes; i += j)           ....而m_request就是HttpServletRequest,它一次将文件流全体读入内存中,也就造成m_totalBytes超级的大,JSON数组对象如何解析?看这里,而在new byte[m_totalBytes];时就在内存在调配了一个超大的空间,内存受不了也就直接报异常了.所以除非改掉这种方法的上传否则是没法解决这个问题的.而commonupload就不个别了,它能够设置一次读取文件最大部门是多少,比部文件有200Mb,你设置一次读取文件的大小是4MB,那么也就超过了一次读4MB到内存,js 如何实现这样多选的功能,而后就此4MB的局部写入硬盘中的暂时文件中,然后再读取下面的4MB,接着把内存的东西刷到硬盘中.也就不会一次读入内存的东西太多,而造成内存的泻漏.以下是应用commonupload上传的部分代码String fileName = " ";  String appPath = request.getSession().getServletContext().getRealPath("/") ;  DiskFileItemFactory factory = new DiskFileItemFactory();  factory.setSizeThreshold(cacheSize);  //缓冲大小  File temFile = new File(appPath+tempFileFold);  //超过缓冲小放在临时文件夹,再一步一步上传  if(!temFile.exists()){   temFile.mkdirs();  }  factory.setRepository(temFile);  ServletFileUpload upload = new ServletFileUpload(factory);  upload.setSizeMax(maxFileSize);  //最大大小    List fileList = null ;    try {   fileList = upload.parseRequest(request);     } catch (FileUploadException e) {   if (e instanceof SizeLimitExceededException) {      System.out.println("超过大小了,返回!");      double maxSize =  maxFileSize/(1024.0*1024.0);             if(maxSize>1.0){                 float fileSize = Math.round(maxSize*1000)/1000;                 request.setAttribute("message",js 如何动态添加数组, MessageResource.readByString("file_size_overflow")+fileSize+"M");             }else{              double kMaxSize = maxFileSize/(1024.0);              float fileSize = Math.round(kMaxSize*100)/100;              request.setAttribute("message",jquery如何获得父级的父级元素?, MessageResource.readByString("file_size_overflow")+fileSize+"K");             }             request.setAttribute("page", request.getParameter("failpage"));             System.out.println("page:"+request.getAttribute("page")+"   messgae:"+request.getAttribute("message"));       return "";      }   e.printStackTrace();  }    if (fileList == null || fileList.size() == 0) {   System.out.println("空文件,返回!");      return "";  }    // 得到所有上传的文件    Iterator fileItr = fileList.iterator();    // 轮回处置所有文件    while (fileItr.hasNext()) {      FileItem fileItem = null;      String path = null;      long size = 0;      // 得到当前文件      fileItem = (FileItem) fileItr.next();      // 疏忽简略form字段而不是上传域的文件域(<input type="text" />等)      if (fileItem == null || fileItem.isFormField()) {       continue;      }      // 得到文件的完整路径      path = fileItem.getName();      // 得到文件的大小      size = fileItem.getSize();      if ("".equals(path) || size == 0) {             System.out.println("空文件2,返回!");       return "" ;      }       // 得到去除路径的文件名      String t_name = path.substring(path.lastIndexOf("\\") + 1);      // 得到文件的扩展名(无扩大名时将得到全名)      String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);      String[] allowFiles = allowedFilesList.split(",");      boolean isPermited = false ;      for(String allowFile:allowFiles){       if(t_ext.equals(allowFile)){        isPermited = true ;        break ;       }             }      if(!isPermited){       request.setAttribute("message", t_ext+MessageResource.readByString("file_format_error")+allowedFilesList);       request.setAttribute("page", request.getParameter("failpage"));       System.out.println(t_ext+"文件格局分歧法,正当文件格式为:"+allowedFilesList);       return "" ;      }           long now = System.currentTimeMillis();      // 依据体系时光天生上传后保存的文件名      String newFileName = String.valueOf(now)+"."+t_ext;      // 保存的终极文件完全门路,保留在web根目录下的ImagesUploaded目录下      File desctemFile = new File(appPath + fileLocationFold);  //超过缓冲小放在常设文件夹,再一步一步上传    if(!desctemFile.exists()){     desctemFile.mkdirs();    }      String u_name = appPath + fileLocationFold        + newFileName ;      fileName = fileLocationFold+newFileName ;                          try {                  fileItem.write(new File(u_name));         } catch (Exception e) {        e.printStackTrace();    }       }      return fileName ; (责任编辑:admin)
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0