안녕하세요.
오늘은 자바 파일업로드에 관해서 설명 드리겠습니다.
오늘의 유틸은 자바 파일업로드를 할 경우 AJAX통신을 이용하여
파일이 변화 될때마다 파일을 업로드 하는 방식입니다.
정말 간단하지만 많은 분들이 개발할때 CONTROLLER마다 하나씩
만드시는 경향이 있는데 아래의 소스를 보시면 한 곳에서
파일을 업로드 할 수 있도록 만들었습니다.
1. JSP에서 파일 업로드를 위한 화면을 만듭니다.
현재 아래의 소스를 보시면 FORM태그 안에 FILE이라는 ELEMENT를 만들었습니다.
1
2
3
4
5
6
7
8
9
|
<form id="fileForm" action="/test/file/uploadAjax" method="post" enctype="multipart/form-data">
<span class="file" id="file">
<input type="file" id="testUploadFile" name="file" >
<label>파일찾기</label>
</span>
</form>
|
2. AJAX를 이용하여 서버에 파일 데이터 전송.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
// 계약서 파일을 변겅 할때마다 파일 업로드를 한다.
$("#testUploadFile").change(function(){
var formData = new FormData($("#fileForm")[0]);
$.ajax({
type : 'post',
url : '/test/file/uploadAjax',
data : formData,
processData : false,
dataType : "json",
contentType : false,
async : false,
success : function(data) {
alert("파일 업로드 성공.");
},
error : function(error) {
alert("파일 업로드에 실패하였습니다.");
}
});
});
|
3. 서버에서 파일 정보를 받아서 처리합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// return value는 입맛에 맞게 return 해주세요.
@PostMapping(value={"/test/file/uploadAjax"})
@ResponseBody
public Map<String, object> TestUploadUtil(HttpServletRequest req) throws IOException {
Map<String, Object> result = new HashMap<>();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
// 파일 디렉토리
Path uploadDir = "C:/test/fileUpload";
// 업로드할 디렉토리의 경로가 없을경우 디렉토리 생성
if(!Files.isDirectory(uploadDir)) {
Files.createDirectories(uploadDir);
}
MultipartFile mFile = multipartRequest.getFileMap().values()
UUID tempFileName = UUID.randomUUID();
String originalFileName = mFile.getOriginalFilename(); // 원본 파일명
String fileExt = FilenameUtils.getExtension(originalFileName);
if(originalFileName.toLowerCase().endsWith(".tar.bz2")) {
fileExt = "tar.bz2";
fileExt = "tar.gz";
}
// 물리파일은 확장자를 제외하고 저장한다.
String logicalFileName = tempFileName.toString()+ "." + fileExt;
byte[] fileBytes = mFile.getBytes(); // 파일을 바이트로 읽어온다.
Path filePath = uploadDir.resolve(logicalFileName);
Files.write(filePath, fileBytes); // 파일 생성
return result;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
설명은 소스안에 들어 있어서 보시면 이해가 되실거 같습니다.
물리 파일의 확장자를 뺀것은 DB에 확장자를 저장하구 다운로드 할때
UUID로 변경된 이름의 파일명+확장자를 추가하여 다운로드 받기위해
확장자를 제거하고 저장하는 식으로 하였습니다.
감사합니다.
도움이 좋아요와 댓글 달아주시면 감사하겠습니다.
블로거의 도움이됩니다.
[Java] 자바 폴더(디렉토리) 생성방법 및 설명(간단) (0) | 2020.02.18 |
---|---|
[Spring, Java] 스프링, 자바 세션 설명 및 사용법(간단) (0) | 2020.02.13 |
[ Java ] 자바 형변환(문자, 숫자) (0) | 2019.09.30 |
[ Java ]자바 for문(반복문) 예제 (0) | 2018.10.24 |
자바[JAVA] 파일 업로드 (11) | 2018.05.09 |