728x90
반응형
파일 업로드를 위한 환경 설정
web.xml 에 Tomcat 파일 업로드 처리를 위한 config 환경 설정 한다.
<multipart-config>
<location>D:\\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>
servlet-context.xml
<!-- multipartResolver-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
이미지 등록 시 섬네일을 만들기 위한 라이브러리도 추가!
// 썸네일 https://mvnrepository.com/artifact/net.coobird/thumbnailator
implementation 'net.coobird:thumbnailator:0.4.17'
JSP, JS
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple>
<button>Upload</button>
</form>
이미지 첨부시 반드시 enctype="multipart/form-data"지정해줘야 한다.
이름은 파라미터 타입과 같이 맞춰주어야 한다.
input file 에 multiple을 추가하면 한번에 여러개 업로드가 가능하다.
controller
@ResponseBody 이것을 붙임으로 list를 보내준다.
@ResponseBody
@PostMapping("/upload") //여러개의 파일을 받고 싶을 때는 배열로 처리한다.
public List<UploadResultDTO> upload1(MultipartFile[] files){
//log.info("----------file---------: "+files);
List<UploadResultDTO> list = new ArrayList<>();
//파일 업로드
for(MultipartFile file:files){
// 업로드 되는 파일 이름
String originalFileName = file.getOriginalFilename();
boolean img = file.getContentType().startsWith("image"); //이미지 여부
//썸네일을 위해 타입을 읽어서
//이미지 타입이라면 썸네일을 만들 수 있도록 한다.
String uuid = UUID.randomUUID().toString();
String saveName = uuid+"_"+originalFileName;
//최종적으로 저장되는 파일 이름, 중복을 방지하기 위해서 UUID 를 사용한다.
String saveFolder = makeFolders();
//날짜별로 첨부파일 정리하기
//전체 경로
File saveFile = new File("D:\\upload\\"+saveFolder+"\\"+saveName);
// 서버까지 파일 업로드가 된 상태... 이제 저장을 해야하는데!
try (InputStream in = file.getInputStream();
FileOutputStream fos =
new FileOutputStream(saveFile);
) {
FileCopyUtils.copy(in, fos);
} catch (IOException e) {
e.printStackTrace();
}
//만약 이미지인 경우 썸네일 만들기
if(img){
String thumbFileName = saveFolder+"\\s_"+saveName;
File thumbFile = new File("D:\\upload\\"+thumbFileName);
try {
Thumbnails.of(saveFile)
.size(200, 200)
.toFile(thumbFile);
} catch (IOException e) {
e.printStackTrace();
}
}//end if(boolean img)
list.add(UploadDTO.builder()
.original(originalFileName)
.uuid(uuid)
.savePath(saveFolder)
.img(img)
.build());
}//end for
return list;
}//end upload1
- 날짜별로 첨부파일 정리하기
폴더의 경로 날짜 별로 정리할 수 있도록 날짜별 폴더를 만들어준다.
폴더가 있었으면 안만들어지고, 기본에 있던 폴더로 들어간다. private String makeFolders(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); String str = sdf.format(new Date()); //java.util 로! File folderPath = new File("D:\\upload\\"+str); //이 경로가 존재하지 않는다면! 만들기 if(!folderPath.exists()){ folderPath.mkdirs(); } return str; }
반응형
'개발_기초 정보' 카테고리의 다른 글
IT 기초 - PMS (Project Management Solution) 이란? (0) | 2023.03.08 |
---|---|
마크 다운 사용법 (1) | 2023.02.24 |
[spring] 트랜잭션 설정하기 (0) | 2023.02.21 |
[Nginx] Nginx로 서버 설정하기 (0) | 2023.02.21 |
[spring] 스프링 빈 조회 할 때 빈이 2개 여러 개 일 경우 (0) | 2023.02.21 |