====== [적용 예] File Upload/Download ====== ===== 개요 ===== [[egovframework:rte:sample:cvpl:file_upload_download|File Upload/Download]] Service 를 적용해서 FAQ 파일첨부에 사용한다. ===== 설명 ===== ==== Configuration ==== === resources\spring\context-properties.xml === === WEB_INF\config\egovframework\springmvc\dispatcher-servlet.xml === ==== Source ==== === egovframework\rte\cvpl\web\resolver\MultiCommonsMultipartResolver.java === public class MultiCommonsMultipartResolver extends CommonsMultipartResolver { public MultiCommonsMultipartResolver() {} public MultiCommonsMultipartResolver(ServletContext servletContext) { super(servletContext); } /** * Only one line changed which is indicated below. */ @Override @SuppressWarnings("unchecked") protected MultipartParsingResult parseFileItems(List fileItems, String encoding) { Map multipartFiles = new HashMap(); Map multipartParameters = new HashMap(); // Extract multipart files and multipart parameters. for (Iterator it = fileItems.iterator(); it.hasNext();) { FileItem fileItem = (FileItem) it.next(); if (fileItem.isFormField()) { String value = null; if (encoding != null) { try { value = fileItem.getString(encoding); } catch (UnsupportedEncodingException ex) { if (logger.isWarnEnabled()) { logger.warn("Could not decode multipart item '" + fileItem.getFieldName() + "' with encoding '" + encoding + "': using platform default"); } value = fileItem.getString(); } } else { value = fileItem.getString(); } String[] curParam = (String[]) multipartParameters.get(fileItem.getFieldName()); if (curParam == null) { // simple form field multipartParameters.put(fileItem.getFieldName(), new String[] { value }); } else { // array of simple form fields String[] newParam = StringUtils.addStringToArray(curParam, value); multipartParameters.put(fileItem.getFieldName(), newParam); } } else { // multipart file field CommonsMultipartFile file = new CommonsMultipartFile(fileItem); if (multipartFiles.put(fileItem.getName(), file) != null) { // CHANGED!! throw new MultipartException("Multiple files for field name [" + file.getName() + "] found - not supported by MultipartResolver"); } if (logger.isDebugEnabled()) { logger.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize() + " bytes with original filename [" + file.getOriginalFilename() + "], stored " + file.getStorageDescription()); } } } return new MultipartParsingResult(multipartFiles, multipartParameters); } } === egovframework\rte\cvpl\web\EgovCvplFaqController.java === /** 파일 처리 */ final Map files = multiRequest.getFileMap(); /** 디렉토리 생성 */ File saveFolder = new File(propertiesService.getString("fileDir")); boolean isDir = false; if (!saveFolder.exists() || saveFolder.isFile()) { isDir = saveFolder.mkdirs(); } else { isDir = true; } if (!isDir) { log.debug("Fail Create folder!!"); model.addAttribute("cvplFaqVO", cvplFaqVO); /* Session */ EgovCvplSessionAuth egovCvplSessionAuth = (EgovCvplSessionAuth)EgovUserDetailsHelper.getAuthenticatedUser(); model.addAttribute("egovCvplSessionAuth", egovCvplSessionAuth); return "/cvpl/EgovCvplFaqUpdate"; } Iterator> itr = files.entrySet().iterator(); MultipartFile file; String filePath = ""; int fileKey = 0; while (itr.hasNext()) { Entry entry = itr.next(); file = entry.getValue(); if (!"".equals(file.getOriginalFilename())) { filePath = propertiesService.getString("filePath") + file.getOriginalFilename(); file.transferTo(new File(filePath)); } if(fileKey == 0 && !"".equals(file.getOriginalFilename())) { cvplFaqVO.setFaqAtch1(file.getOriginalFilename()); } if(fileKey == 1 && !"".equals(file.getOriginalFilename())) { cvplFaqVO.setFaqAtch2(file.getOriginalFilename()); } fileKey++; } === WEB-INF\jsp\egovframework\rte\cvpl\EgovCvplFaqUpdate.jsp ===