@Value("${file.directory}")
private String uploadFolder;
properties 파일에서 설정
file.directory=\\local\\file
public List<FileVO> uploadFile(List<MultipartFile> files) {
List<FileVO> fileList = new ArrayList<>();
File uploadPath = new File(uploadFolder, getFolder());
if (!uploadPath.exists()) {
uploadPath.mkdirs();
}
for (MultipartFile file : files) {
FileVO fileVO = new FileVO();
String uploadFileName = file.getOriginalFilename();
String uuid = UUID.randomUUID().toString();
File saveFile = new File(uploadPath, uuid);
try {
file.transferTo(saveFile);
} catch (IOException e) {
throw new RuntimeException(e);
}
fileVO.setFileId(uuid);
fileVO.setFileOrgNm(file.getOriginalFilename());
fileVO.setFileSaveNm(uuid);
fileVO.setFileSize(file.getSize());
fileVO.setFilePath(uploadFolder + "/" + getFolder());
fileList.add(fileVO);
}
return fileList;
}
1) 업로드할 경로 설정
File uploadPath = new File(uploadFolder, getFolder());
if (!uploadPath.exists()) {
uploadPath.mkdirs();
}
2) 업로드할 파일정보 설정
for (MultipartFile file : files) {
String orgNm = file.getOriginalFilename();
String extension = getExtension(orgNm);
String fileId = UUID.randomUUID().toString();
String uuidSaveNm = UUID.randomUUID().toString();
String saveNm = uuidSaveNm + extension;
FileVO fileVO = new FileVO();
File saveFile = new File(uploadPath, saveNm);
try {
file.transferTo(saveFile); // 지정한 경로로 파일 저장
} catch (IOException e) {
throw new RuntimeException(e);
}
}
-getFolder()
public String getFolder() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
String str = sdf.format(date);
return str;
}
-yyyy/MM/dd 형식으로 폴더를 지정하는 이유
: 하나의 폴더에 생성될 수 있는 파일의 개수에 대한 문제(각 OS마다 폴더(디렉토리)에 저장될 수 있는 파일의 개수가 다름), 한 폴더에 너무 많은 파일이 있는 경우 속도의 저하와 개수의 제한 문제가 생기는 것을 방지
-getExtention(String FileOrgNm)
public String getExtension(String fileOrgNm) {
String extension = fileOrgNm.substring(fileOrgNm.lastIndexOf("."));
return extension;
}
<a href='/post/fileDownload/<c:out value="${file.fileId}"/>' class="me-1 a-tag">${file.fileOrgNm}</a>
public void fileDownload(String fileId, HttpServletResponse response){
FileVO fileVO = fileDao.getFileById(fileId);
String filename = fileVO.getFileOrgNm();
File file = new File(fileVO.getFilePath(), fileVO.getFileSaveNm());
String encodedFileName;
try {
encodedFileName = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
response.setContentType("application/download");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attatchment;filename=\"" + encodedFileName + "\"");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try (OutputStream out = response.getOutputStream();
FileInputStream fis = new FileInputStream(file);) {
FileCopyUtils.copy(fis, out);
} catch (IOException e) {
e.printStackTrace();
}
public void preview(FileVO fileVO, HttpServletResponse response) {
File file = new File(fileVO.getFilePath(), fileVO.getFileSaveNm());
try {
String contentType = Files.probeContentType(file.toPath());
if (contentType != null && contentType.startsWith("image")) { //이미지 일 때만
response.setContentType(contentType);
Thumbnails.of(file)
.size(100, 100)
.outputQuality(0.8)
.toOutputStream(response.getOutputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
}