<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize"> <value>50000000</value> </property>
</bean>
<!-- file upload controller 셋팅 -->
<bean id="uploadControl" class="com.disc.gwp.control.FileUploadControl">
<property name="destinationDir" value="/groupware/attach/gwp/tempUpload" />
<property name="fileService" ref="fileService" />
<property name="boardService" ref="boardService" />
</bean>
파일 업로드 Controller 소스.
package com.linuxwan.control;
import jada.common.util.StringUtil;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import org.springframework.web.util.WebUtils;
import com.linuxwan.ibatis.domain.Ca002m;
import com.linuxwan.ibatis.domain.Ca002t;
import com.linuxwan.ibatis.domain.Ca002tExample;
import com.linuxwan.service.BoardService;
import com.linuxwan.service.FileService;
import com.linuxwan.session.UserSession;
import com.linuxwan.util.GenSequenceNo;
/**
* @author
*/
public class FileUploadControl extends AbstractCommandController {
private static Log logger = LogFactory.getLog(FileUploadControl.class);
private FileService fileService = null;
private BoardService boardService = null;
private String destinationDir;
public FileUploadControl() {
setCommandClass(Ca002t.class);
}
/**
* 파일업로드를 위한 빈 설정의 property
* destinationDir setter injection
* @param destinationDir
*/
public void setDestinationDir(String destinationDir) {
this.destinationDir = destinationDir;
}
/**
* FileService setter Injection
* @param fileService
*/
public void setFileService(FileService fileService) {
this.fileService = fileService;
}
public FileService getFileService() {
return this.fileService;
}
public void setBoardService(BoardService boardService) {
this.boardService = boardService;
}
public BoardService getBoardService() {
return this.boardService;
}
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder)
throws ServletException {
binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
}
/* (non-Javadoc)
* @see org.springframework.web.servlet.mvc.AbstractCommandController#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.validation.BindException)
*/
@Override
protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object command, BindException errors)
throws Exception {
// TODO Auto-generated method stub
ModelAndView mav = new ModelAndView("common/file_search_popup_01");
String mode = StringUtil.null2void(request.getParameter("mode"));
String cntnId = StringUtil.null2void(request.getParameter("cntnId"));
String dcmtRgsrNo = StringUtil.null2void(request.getParameter("dcmtRgsrNo"));
String attachList = StringUtil.null2void(request.getParameter("attachList"));
UserSession userSession = (UserSession) WebUtils.getRequiredSessionAttribute(request, "userSession");
FileService fileService = (FileService) getFileService();
BoardService boardService = (BoardService) getBoardService();
ArrayList<Ca002t> attach = new ArrayList<Ca002t>();
Ca002t ts002t = null;
if (attachList != null && attachList != "") {
StringTokenizer files = new StringTokenizer(attachList, "^");
while (files.hasMoreTokens()) {
ts002t = new Ca002t();
StringTokenizer token = new StringTokenizer(files.nextToken(), "|");
while(token.hasMoreTokens()) {
ts002t.setSysFileName(token.nextToken());
ts002t.setOrgnFileName(token.nextToken());
attach.add(ts002t);
}
}
}
if (mode.equals("ADD")) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("file");
String fileName = file.getOriginalFilename();
String sysFileName = GenSequenceNo.getFileRgsrNo(userSession.getEmpNo());
File destination = File.createTempFile(sysFileName, "", new File(destinationDir));
FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(destination));
Ca002t fileVO = (Ca002t) command;
fileVO.setOrgnFileName(file.getOriginalFilename());
fileVO.setSysFileName(sysFileName);
fileVO.setFileSize(file.getSize());
fileVO.setFileData(file.getBytes());
fileService.addTempFileUpload(fileVO);
destination.delete();
attach.add(fileVO);
if (attachList.trim().equals("")) {
attachList = fileVO.getSysFileName() + "|" + fileVO.getOrgnFileName();
} else {
attachList = attachList + "^" + fileVO.getSysFileName() + "|" + fileVO.getOrgnFileName();
}
mav.addObject("mode", "ADD");
mav.addObject("attachFileList", attachList);
mav.addObject("attachList", attach);
} else if (mode.equals("DEL")) {
String delFile = StringUtil.null2void(request.getParameter("delFile"));
StringTokenizer token = new StringTokenizer(delFile, "|");
String orgnFileName = "";
String sysFileName = "";
while(token.hasMoreTokens()) {
sysFileName = token.nextToken();
orgnFileName = token.nextToken();
}
Ca002tExample example = new Ca002tExample();
Ca002tExample.Criteria c = example.createCriteria();
c.andSysFileNameEqualTo(sysFileName);
c.andOrgnFileNameEqualTo(orgnFileName);
fileService.removeTempFileUpload(example);
for (int i = 0; i < attach.size(); i++) {
Ca002t temp = (Ca002t) attach.get(i);
if (temp.getSysFileName().equals(sysFileName)) attach.remove(i);
}
attachList = "";
for (int i = 0; i < attach.size(); i++) {
Ca002t fileVO = (Ca002t) attach.get(i);
if (i == 0) {
attachList = fileVO.getSysFileName() + "|" + fileVO.getOrgnFileName();
} else {
attachList = attachList + "^" + fileVO.getSysFileName() + "|" + fileVO.getOrgnFileName();
}
}
mav.addObject("mode", "DEL");
mav.addObject("attachFileList", attachList);
mav.addObject("attachList", attach);
} else if (mode.equals("LIST")) {
// Temp 테이블에 첨부파일이 등록되어져 있는지 확인
int fileCnt = attach.size();
Ca002m attachFile = new Ca002m();
attachFile.setCntnId(cntnId);
attachFile.setDcmtRgsrNo(dcmtRgsrNo);
attachList = "";
for (int i = 0; i < fileCnt; i++) {
Ca002t tempFile = attach.get(i);
attachFile.setOrgnFileName(tempFile.getOrgnFileName());
attachFile.setSysFileName(tempFile.getSysFileName());
Ca002tExample example = new Ca002tExample();
Ca002tExample.Criteria criteria = example.createCriteria();
criteria.andSysFileNameEqualTo(tempFile.getSysFileName());
criteria.andOrgnFileNameEqualTo(tempFile.getOrgnFileName());
boolean check = fileService.findCheckTempFileUpload(example);
// Temp 테이블에 첨부파일이 없을 경우
if (!check) {
Ca002m result = boardService.findAttachFileInfo(attachFile);
Ca002t insTempFile = new Ca002t();
insTempFile.setOrgnFileName(result.getOrgnFileName());
insTempFile.setSysFileName(result.getSysFileName());
insTempFile.setFileSize(result.getFileSize());
insTempFile.setFileData(result.getFileData());
fileService.addTempFileUpload(insTempFile);
}
if (i == 0) {
attachList = tempFile.getSysFileName() + "|" + tempFile.getOrgnFileName();
} else {
attachList = attachList + "^" + tempFile.getSysFileName() + "|" + tempFile.getOrgnFileName();
}
}
mav.addObject("mode", "LIST");
mav.addObject("attachFileList", attachList);
mav.addObject("attachList", attach);
}
mav.addObject("cntnId", cntnId);
mav.addObject("dcmtRgsrNo", dcmtRgsrNo);
return mav;
}
}
댓글 없음:
댓글 쓰기