2014년 6월 2일 월요일

파일 업로드를 위한 Spring 설정
<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;
}

}

댓글 없음:

댓글 쓰기