Structured data
- Category
- Programming
파일업로드 #
- 오픈소스 애플리케이션 프레임워크인 스프링 프레임워크의 내장객체(CommonsMultipartResolver)를 이용한 파일 업로드 방식을 알아보고 설정 방법 및 예제에 대한 방법이다.
SPRING/파일업로드 적용방법 #
pom.xml 설정 #
<!-- MultipartHttpServletRequset -->
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
- maven build를 위해 pom.xml 파일에 commons-fileupload.jar,commons-io.jar 파일을 추가한다.
spring-context.xml 설정(spring bean설정) #
<!-- MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000"/> <!-- 10MB-->
<property name="maxInMemorySize" value="100000000"/> <!-- 10MB-->
</bean>
- CommonsMultipartResolver는 스프링 프레임워크에 내장되어있다.
- property -> maxUploadSize : 파일 업로드 시 최대 올릴 수 있는 파일 사이즈
- property -> maxInMemorySize : 적용된 경로에 최대로 저장할 수 있는 파일 사이즈
<!-- form enctype="multipart/form-data"를 적어줘야 한다. -->
<form method="post" action="<c:url value='/regFile'/>" enctype="multipart/form-data">
<!-- input type="file" 이라고 꼭 저어줘야 함 -->
<input type="file" class="form-control" id="uploadFile"
name="uploadFile" />
<button type="submit" class="btn btn-default">저장</button>
<button type="list" class="btn btn-default">목록</button>
</form>
- form 태그의 enctype을 multipart/form-data로 설정해줘야 파일업로드 기능이 적용된다.
- INPUT 값에 대한 타입은 file로 적용해야한다.
java 설정(서버) - 준비 #
public class UtilFile {
String fileName = "";
// fileUpload() 메소드에서 전체 경로를 DB에 경로 그대로 저장 한다.
public String fileUpload(MultipartHttpServletRequest request,
MultipartFile uploadFile, Object obj) {
String path = "";
String fileName = "";
OutputStream out = null;
PrintWriter printWriter = null;
try {
fileName = uploadFile.getOriginalFilename();
byte[] bytes = uploadFile.getBytes();
path = getServletContext().getRealPath("/") + "files/;
File file = new File(path);
// 파일명이 중복체크
if (fileName != null && !fileName.equals("")) {
if (file.exists()) {
// 파일명 앞에 구분(예)업로드 시간 초 단위)을 주어 파일명 중복을 방지한다.
fileName = System.currentTimeMillis() + "_" + fileName;
file = new File(path + fileName);
}
}
out = new FileOutputStream(file);
out.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return path + fileName;
}
- 업로드한 파일의 경로가 도메인 별로 달라지기 때문에 파일 저장 정로를 다르게 지정해야 한다.
java 설정(서버) - 적용 #
@Controller
public class RewardController {
// 파일을 업로드하는 컨트롤러 클래스 메소드
@RequestMapping(value = "re/add", method = RequestMethod.POST)
// 인자로 MulfiPartFile 객체,
MultipartHttpServletRequest 객체, 업로드 하려는 도메인 클래스를 받는다
public String reAddProCtrl(@RequestParam("uploadFile") MultipartFile uploadFile, MultipartHttpServletRequest request, Reward reward) {
//UtilFile 객체 생성
UtilFile utilFile = new UtilFile();
//파일 업로드 결과값을 path로 받아온다
String uploadPath=utilFile.fileUpload(request,uploadFile,
reward);
// 해당 경로만 받아 db에 저장한다.
int n = rewardService.reAddServ(uploadPath, reward);
return "isg/Boardlist";
}
}
참고문헌 #
관련 페이지 #
Spring