-
[전자정부 프레임워크_JAVA] eGovframework 웹 어플리케이션 개발_05 전자정부 프레임워크 파일업로드 구현 하기!!Java/전자정부 프레임워크 2019. 7. 11. 22:50반응형
오늘은 사용자가 서버에 파일을 업로드할 수 있도록 구현해 보려고 한다.
그럼 바로 가시죠!!!
먼저 파일 업로드를 구현하기 위한 dependency 의존성을 추가해 준다.
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.2</version> </dependency>
다음 dispatcher-servlet에 아래와 같이 bean을 등록해준다.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1000000000" /> <property name="maxInMemorySize" value="1000000000" /> </bean>
VO
import org.springframework.web.multipart.MultipartFile; public class commonFileVo { private MultipartFile mpfile; private String id; private String fileName; private String action;
위와 같이 VO를 생성하고 getter와 setter를 generate 해준다.
또한 DB에도 table을 생성해 준다.
Controller
@RequestMapping(value="/fileUpload.do") public String fileUploadTest(MultipartHttpServletRequest req) throws Exception { System.out.println("파일 업로드 시작"); Iterator<String> itr = req.getFileNames(); boolean isLocal = false; testFileUploadVo FileUploadVo = new testFileUploadVo(); FileUploadVo.setId(req.getParameter("id")); FileUploadVo.setDate(new Date()); String requestUrl = new String(req.getRequestURL()); System.out.println(requestUrl); if (requestUrl.contains("localhost") || requestUrl.contains("127.0.0.1")) { isLocal = true; } while(itr.hasNext()) { MultipartFile mpf = req.getFile(itr.next()); FileUploadVo.setMpfile(mpf); testService.fileUpload(FileUploadVo, isLocal); } return "업로드 완료"; }
간략히 설명하면 view 단 jsp 페이지로부터 MultipartHttpServletRequest형식의 parameter를
받아서 앞서 만든 Vo에 set 해준다.
test환경과 실제 운영환경은 당연히 다르기 때문에 파일이 업로드될 경로도 달라질 것이다.
때문에 gerRequestURL()로 요청이 들어온 url를 requestUrl로 받아
업로드 요청이 로컬에서 들어온 것인지 (test 환경인지) 확인해 로컬 환경이면 isLocal이 true
아니면 false를 세팅해 이 값에 따라서 업로드 경로를 추후 Service단에서 설정해 준다.
ServiceImpl
@Override public void fileUpload(testFileUploadVo FileUploadVo, Boolean isLocal) throws Exception{ String filePath = "/usr/local/리눅스 서버 경로....."; if (isLocal) { filePath = "F:\\eGovFrameDev-3.8.0-64bit\\Server\\apache-tomcat-9.0.21\\webapps\\test"; } MultipartFile file = FileUploadVo.getMpfile(); String orgFileNm = file.getOriginalFilename(); String fileExt = orgFileNm.substring(orgFileNm.lastIndexOf('.')+1); String fileName =orgFileNm.substring(0, orgFileNm.lastIndexOf('.')); String fullFileName =fileName +"_"+ new SimpleDateFormat("yyyyMMddhhmm").format(new Date()) + "." + fileExt; System.out.println(fullFileName); try { file.transferTo(new File(filePath + File.separator + fullFileName)); FileUploadVo.setFileName(fullFileName); testMapper.fileUploadLog(FileUploadVo); } catch (Exception e) { e.printStackTrace(); } }
isLocal 값에 따라 업로드 경로를 세팅해준 뒤 파일명에 현재 날짜를 추가해
transferTo 함수를 사용해 업로드해준다.
이때 DB에 파일 업로드 로그도 같이 남겨준다.
View 단
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <body> <form action="/Jay/test/fileUpload.do" id="fileUpload" name="fileUpload" method="post" enctype="multipart/form-data"> 업로드 한사람 : <input type="text" name="id"><br> 파일 : <input type="file" name="file"><br> <input type="submit" name="업로드" value="업로드"><br> </form> </body>
파일뿐만 아니라 누가 파일을 업로드했는지 로그를 남기기 위해서 업로드한 사람 정보도 같이 받는다.
여기서는 그냥 입력하게 했지만 원래라면 로그인한 사람의 아이디를 가져와야 하겠죠?!!
DB에 로그를 작성하기 위한 쿼리
<insert id="fileUploadLog" parameterType="JayPrj.testPkg.vo.testFileUploadVo"> INSERT INTO FILE_LOG ( ID ,FILE_NAME ,DATE )VALUES ( '${id}' ,'${fileName}' ,'${date}' ) </insert>
업로드한 사람의 ID와 파일명 날짜 데이터를 받아 DB에 기록한다.
파일 업로드 TEST
위 사진과 같이 파일명 뒤에 업로드 날짜가 들어가고 로그도 정상적으로 남고 업로드도 잘 된 것을 확인할 수 있다.
오늘은 여기까지 파일 업로드를 구현해 보았습니다.
그럼 다음 포스팅으로 찾아오겠습니다.
반응형'Java > 전자정부 프레임워크' 카테고리의 다른 글