자바파일 다중업로드를 간단하게 만들었다.
1. java
@PostMapping("/uploadAjaxAction")
public @ResponseBody void uploadAjaxPost(MultipartFile[] uploadFile) {
//String uploadFolder = "C:\\upload"; //윈도우 경로
String uploadFolder = "/uploadData"; //리눅스서버 경로
File uploadPath = new File(uploadFolder, FolderUtil.getFolder());
log.info("upload path: "+ uploadPath);
if(uploadPath.exists() == false) {
uploadPath.mkdirs(); //경로에 폴더가없으면 생성시킴
}
for(MultipartFile multipartFile : uploadFile) {
log.info("------------------------------");
log.info("file name : " + multipartFile.getOriginalFilename()); //파일 풀네임
log.info("file size : " + multipartFile.getSize()); //파일 사이즈
String uploadFileName = multipartFile.getOriginalFilename();
//IE has file path
//uploadFileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\")+1);
log.info("file name = " + uploadFileName);
UUID uuid = UUID.randomUUID(); //원본파일명이랑 서버에저장할파일명을 구분하기위해 UUID를 사용했다
uploadFileName = uuid.toString() + "_" + uploadFileName; //UUID(랜덤문자라생각하면편함) + 원본파일명
File saveFile = new File(uploadPath, uploadFileName);
try {
multipartFile.transferTo(saveFile); //물리적인 파일을 해당경로에 저장한다.
}catch(Exception e) {
log.error(e.getMessage());
log.error("error : ",e);
}
}
}
2. FolderUtil
public static String getFolder() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
// 현재날짜를받아옴
Date date = new Date();
String str = sdf.format(date);
return str.replace("-", File.separator);
// "-" 를 운영체제에 맞게 / 또는 \\ 으로 변경한다.
}
이렇게 해놓고 돌렸더니 윈도우환경에서는 파일도 업로드가 잘되고 폴더도 새로 생성이잘된다.
하지만 리눅스서버에 배포를하고서 파일을 업로드하니 무슨문제때문인지 계속 파일을 찾을수없다는오류가나온다.
해당경로에 폴더조차 생성되지않고있어서 해결할방법을 찾는중이다;;
참고적으로 경로설정시 주의사항으로는 운영체제별로 차이가있다.
운영체제 | 구분자(설명) |
Windows | \\ (역슬래쉬 두개) |
Linux | / (슬래쉬 한개) |
✔해당경로로 맞춰주지않으면 경로가 서로다르기때문에 주의해서 작성하자..
어쩌다가 경로를 잘못설정해서 리눅스에다가 윈도우 경로를 넣어놓고 실행을했더니
이런오류가났다.
그런데 확인해보니 경로가 /var/lib/tomcat9/work/Catalina/localhost/ROOT 부터 시작을하길래 해당경로를 아래와같이 수정한 후 다시 리눅스서버에서 돌렸더니
String uploadFolder = "/var/lib/tomcat9/work/Catalina/localhost/ROOT";
오류없이 잘되었다.
생각해보니 소스자체가 톰캣에서 돌기때문에 리눅스의 절대경로를 따라가는게아닌 톰캣의 경로에 맞춰서 파일을 업로드해야되는게 맞는것같다.
서버에대한 공부가 더 필요할것같다.
'Java > Java😊' 카테고리의 다른 글
[Java] TCP 통신에서 클라이언트의 국가를 확인하는 방법 (0) | 2023.05.10 |
---|---|
[Java] enum 개념과 예시 (0) | 2023.05.10 |
[Java] 현재접속한 IP, Browser, OS, 접속정보 확인 하는 방법 (0) | 2022.04.16 |
[Java] excel 파일 데이터 처리 (0) | 2021.11.19 |
[Java] 현재 분기 구하기 (0) | 2021.06.15 |