====== [적용 예] 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 ===