A>common-fileupload 사용시
a> pom.xml 에 추가 해야 할 것들
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
b> servlet-context.xml에 추가해야 할 것들
1.multipartResolver
1
2
3
4
5
6
7
8
9
10
11
12
|
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="defaultEncoding" value="utf-8"></beans:property>
<!-- 1024 * 1024 * 10 bytes 10MB -->
<beans:property name="maxUploadSize" value="104857560"></beans:property>
<!-- 1024 * 1024 * 2 bytes 2MB -->
<beans:property name="maxUploadSizePerFile"
value="2097152"></beans:property>
<beans:property name="uploadTempDir"
value="file:/C:/upload/tmp"></beans:property>
<beans:property name="maxInMemorySize" value="10485756"></beans:property>
</beans:bean>
|
cs |
B서블릿 3.0 이상에서 .form 태그를 이용하는 방식
a> web.xml 에 추가해야 할 것들
서블릿 3.0 이상이라면 그냥
web.xml에 추가만 해도 된다.
<multipart-config>
<location>C:\\upload\\temp</location>
<max-file-size>20971520</max-file-size> <!--1MB * 20 -->
<max-request-size>41943040</max-request-size><!-- 40MB -->
<file-size-threshold>20971520</file-size-threshold> <!-- 20MB -->
</multipart-config>
b> servlet-context.xml 에 추가해야 할 것들
1
2
3
|
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</beans:bean>
|
cs |
c> form의 형태
1
2
3
4
5
6
|
<form action="uploadFormAction" method="post" enctype="multipart/form-data">
<input type='file' name='uploadFile' multiple>
<button>Submit</button>
|
cs |
d> 컨트롤러 작성
이런식으로 하면된다.
1
2
3
4
5
6
7
8
9
11
12
14
15
|
@PostMapping("/uploadFormAction")
public void uploadFormPost(MultipartFile[] uploadFile, Model model) {
for (MultipartFile multipartFile : uploadFile) {
log.info("-------------------------------------");
log.info("Upload File Name: " +multipartFile.getOriginalFilename());
log.info("Upload File Size: " +multipartFile.getSize());
}
}
}
|
cs |
jsp에서 날아온 file객체들은 MulitpartFile[] 형태로 날아온다.
e> MultipartFile 의 메서드
String getName( ) |
파라미터의 이름 <input> 태그의 이름 |
String getOriginalFileName( ) |
업로드되는 파일의 이름 |
boolean isEmpty( ) |
파일이 존재하지 않는 경우 true |
long getSize( ) |
업로드되는 파일의 크기 |
byte[ ] getBytes( ) |
byte[ ]로 파일 데이터 반환 |
InputStream getInputStream( ) |
파일데이터와 연결된 InputStream을 반환 |
transferTo(File file) |
파일의 저장 |
f> 자바코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename());
try {
multipartFile.transferTo(saveFile);
} catch (Exception e) {
log.error(e.getMessage());
}//end catch
|
cs |
C> AJAX 를 이용한 파일 업로드
a>script 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<script>
$(document).ready(function(){
$("#uploadBtn").on("click", function(e){
var formData = new FormData();
var inputFile = $("input[name='uploadFile']");
var files = inputFile[0].files;
console.log(files);
});
});
</script>
end catch
|
cs |
b>ajax 코드
processData속성과 contentType속성의 조절이 필수
1
2
3
4
5
6
7
8
9
10
|
$.ajax({
url: '/uploadAjaxAction',
processData: false,
contentType: false,
data: formData,
type: 'POST',
success: function(result){
alert("Uploaded");
}
});
|
cs |
c> 동일한 파일 이름 업로드를 위한 컨트롤러
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
@PostMapping(value = "/uploadAjaxAction", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ResponseEntity<List<AttachFileDTO>> uploadAjaxPost(MultipartFile[] uploadFile) {
List<AttachFileDTO> list = new ArrayList<>();
String uploadFolder = "C:\\upload\\temp";
String uploadFolderPath = getFolder();
// make folder --------
File uploadPath = new File(uploadFolder, uploadFolderPath);
if (uploadPath.exists() == false) {
uploadPath.mkdirs();
}
// make yyyy/MM/dd folder
for (MultipartFile multipartFile : uploadFile) {
AttachFileDTO attachDTO = new AttachFileDTO();
String uploadFileName = multipartFile.getOriginalFilename();
// IE has file path
uploadFileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\") + 1);
log.info("only file name: " + uploadFileName);
attachDTO.setFileName(uploadFileName);
UUID uuid = UUID.randomUUID();
uploadFileName = uuid.toString() + "_" + uploadFileName;
try {
File saveFile = new File(uploadPath, uploadFileName);
multipartFile.transferTo(saveFile);
attachDTO.setUuid(uuid.toString());
attachDTO.setUploadPath(uploadFolderPath);
// check image type file
if (checkImageType(saveFile)) {
attachDTO.setImage(true);
FileOutputStream thumbnail = new FileOutputStream(new File(uploadPath, "s_" + uploadFileName));
Thumbnailator.createThumbnail(multipartFile.getInputStream(), thumbnail, 100, 100);
thumbnail.close();
}
// add to List
list.add(attachDTO);
} catch (Exception e) {
e.printStackTrace();
}
} // end for
return new ResponseEntity<>(list, HttpStatus.OK);
}
|
cs |
'웹 > spring' 카테고리의 다른 글
spring --11. RESTful API (0) | 2021.02.25 |
---|---|
spring --11.예외처리 (0) | 2021.02.22 |
spring --0. 설정 (0) | 2021.02.22 |
spring --8.MVC (0) | 2021.02.19 |
spring --7. 로그 (0) | 2021.02.19 |