public void validateUpload() throws Exception { String tmpDir = null; long memoryMax = 0; long allSizeMax = 0; long oneSizeMax = 0; String[] suffixArray = null; Upload _upload = method.getAnnotation(Upload.class); if (_upload != null) { if (_upload.tmpDir().trim().length() > 0) tmpDir = _upload.tmpDir(); if (_upload.maxMemorySize().trim().length() > 0) memoryMax = CommonUtil.strToInt(CommonUtil.parseFileSize(_upload.maxMemorySize()) + ""); if (_upload.maxRequestSize().trim().length() > 0) allSizeMax = CommonUtil.parseFileSize(_upload.maxRequestSize()); if (_upload.maxFileSize().trim().length() > 0) oneSizeMax = CommonUtil.parseFileSize(_upload.maxFileSize()); if (_upload.suffix().length > 0) suffixArray = _upload.suffix(); } long countAllSize = 0; for (Iterator<Entry<String, List<UploadFile>>> it = this.context.getUploadMap().entrySet().iterator(); it.hasNext(); ) { Entry<String, List<UploadFile>> e = it.next(); String fieldName = e.getKey(); List<UploadFile> files = e.getValue(); for (UploadFile file : files) { String fileName = file.getFileName(); String fileContentType = file.getContentType(); if (suffixArray != null && suffixArray.length > 0) { boolean isOk = false; for (String suffix : suffixArray) { if (fileName.endsWith("." + suffix)) { isOk = true; break; } } if (!isOk) { String err = "your upload file " + fileName + " type invalid ! only allow " + Arrays.asList(suffixArray); Map<String, String> errMap = new HashMap<String, String>(); errMap.put(fieldName, err); context.getValidation().getErrors().put("upload", errMap); return; } } long fileSize = file.getSize(); if (fileSize > oneSizeMax) { Map<String, String> errMap = new HashMap<String, String>(); String err = "your upload file " + fileName + " size overflow, only allow less than " + oneSizeMax; errMap.put(fieldName, err); context.getValidation().getErrors().put("upload", errMap); return; } countAllSize += fileSize; if (countAllSize > allSizeMax) { Map<String, String> errMap = new HashMap<String, String>(); String err = "your upload files all size overflow, only allow less than " + allSizeMax; errMap.put(fieldName, err); context.getValidation().getErrors().put("upload", errMap); return; } } } }
private Object[] assemParams(Class<?>[] paramTypes, Annotation[][] paramAnns) throws Exception { Object[] params = new Object[paramTypes.length]; int pathParamIndex = 0; for (int i = 0; i < paramTypes.length; ++i) { Annotation[] anns = paramAnns[i]; Class<?> paramClass = paramTypes[i]; String[] paramValue = null; // ------------------------------------------------------ // 通过给定class 获取对应的ActionContextObj if (Context.class.isAssignableFrom(paramClass)) { params[i] = this.context; continue; } if (HttpServletRequest.class.isAssignableFrom(paramClass)) { params[i] = this.context.getRequest(); continue; } if (HttpServletResponse.class.isAssignableFrom(paramClass)) { params[i] = this.context.getResponse(); continue; } if (PrintWriter.class.isAssignableFrom(paramClass)) { params[i] = this.context.getWriter(); continue; } if (ServletOutputStream.class.isAssignableFrom(paramClass)) { params[i] = this.context.getOut(); continue; } if (HttpSession.class.isAssignableFrom(paramClass)) { params[i] = this.context.getSession(); continue; } if (ActionProp.class.isAssignableFrom(paramClass)) { if (this.context.getActionProp() == null) this.context.setActionProp(new ActionProp(this.actionObject.getClass().getName())); params[i] = this.context.getActionProp(); continue; } if (Validation.class.isAssignableFrom(paramClass)) { params[i] = this.context.getValidation(); continue; } if (QueryParams.class.isAssignableFrom(paramClass)) { params[i] = this.context.getQueryParams(); continue; } if (DAO.class.isAssignableFrom(paramClass)) { params[i] = new DAOImpl(""); continue; } if (InsertDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getInsertDAO(); continue; } if (DeleteDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getDeleteDAO(); continue; } if (UpdateDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getUpdateDAO(); continue; } if (SelectDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getSelectDAO(); continue; } if (DivPageDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getDivPageDAO(); continue; } if (SearchDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getSearchDAO(); continue; } if (CascadeDAO.class.isAssignableFrom(paramClass)) { params[i] = DAOFactory.getCascadeDAO(); continue; } PathParam pathParamAnn = this.getPathParamAnn(anns); if (pathParamAnn != null) { paramValue = this.getPathParamValue(pathParamAnn.value()); params[i] = ClassUtil.getParamVal(paramClass, paramValue[0]); continue; } QueryParam queryParamAnn = this.getQueryParamAnn(anns); // 视图模型 if (queryParamAnn == null && Map.class.isAssignableFrom(paramClass)) { params[i] = this.context.getModel(); continue; } if (queryParamAnn != null) { final String fieldName = queryParamAnn.value(); if (File.class.isAssignableFrom(paramClass)) { if (!this.context.getUploadMap().containsKey(fieldName)) continue; List<UploadFile> list = this.context.getUploadMap().get(fieldName); if (list == null || list.isEmpty()) continue; UploadFile uploadFile = list.get(0); File file = uploadFile.getTmpFile(); params[i] = file; continue; } if (File[].class.isAssignableFrom(paramClass)) { if (!this.context.getUploadMap().containsKey(fieldName)) continue; List<UploadFile> list = this.context.getUploadMap().get(fieldName); if (list == null || list.isEmpty()) continue; File[] files = new File[list.size()]; for (int j = 0; j < files.length; j++) files[j] = list.get(j).getTmpFile(); params[i] = files; } if (UploadFile.class.isAssignableFrom(paramClass)) { if (!this.context.getUploadMap().containsKey(fieldName)) continue; List<UploadFile> list = this.context.getUploadMap().get(fieldName); if (list == null || list.isEmpty()) continue; UploadFile uploadFile = list.get(0); params[i] = uploadFile; continue; } if (UploadFile[].class.isAssignableFrom(paramClass)) { if (!this.context.getUploadMap().containsKey(fieldName)) continue; List<UploadFile> list = this.context.getUploadMap().get(fieldName); if (list == null || list.isEmpty()) continue; params[i] = list.toArray(new UploadFile[] {}); } String defaultValue = null; DefaultValue defaultValueAnn = this.getDefaultValueAnn(anns); if (defaultValueAnn != null) defaultValue = defaultValueAnn.value(); paramValue = this.getQueryParamValue(fieldName, defaultValue); if (java.util.Date.class.isAssignableFrom(paramClass)) { params[i] = this.getDateParam(anns, paramValue[0]); continue; } String startName = fieldName; if (ClassUtil.isPojo(paramClass)) { params[i] = this.injectParam2Pojo(paramClass, startName); continue; } if (Map.class.isAssignableFrom(paramClass)) { params[i] = this.injectParam2Map(startName); continue; } if (paramClass.isArray()) params[i] = ClassUtil.getParamVals(paramClass, paramValue); else params[i] = ClassUtil.getParamVal(paramClass, paramValue[0]); } else { // 如果是基本数据类型,则按照排序进行注入 String[] pathParams = this.context.getActionConfigBean().getPathParams(); if (pathParams == null) { log.warn("QueryParam not found and PathParam not found too"); continue; } paramValue = this.getPathParamValue(pathParams[pathParamIndex]); params[i] = ClassUtil.getParamVal(paramClass, paramValue[0]); pathParamIndex++; continue; } } return params; }