써먹는 웹개발
[Java&Js] 윈도우 다운로드 경로에 (엑셀) 파일 다운로드 순서 본문
728x90
반응형
231013
1. 접근 가능한 경로 등록
- 로컬서버
1
2
3
|
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="C:\Users\Public" path="/Public" reloadable="true"/>
</Host>
|
cs |
- 개발서버 (또는 운영서버)
1
2
3
4
|
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="/home/tomcat/temp" path="/Public" reloadable="true"/>
</Host>
|
cs |
※ 로컬 경로는 편법입니다. (우리회사 개발자 PC와 추후에 개발PC가 바뀌더라도 전부 있을만한 경로가 'C:\Users\Public' 라고 생각함)
로컬/개발서버 각각 진짜 있는 경로를 설정해야 서버 실행이 가능함
2. 엑셀을 임시 폴더에 다운로드
- Java에서는 사용자 다운로드 폴더에 직접 다운불가
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
|
// .xlsx 파일 생성
XSSFWorkbook wb = new XSSFWorkbook();
// (중간 생략)
String filename = params.getFileName();
String folderPath; // 로컬과 개발경로 다름
if(serverType.equals("local")) {
folderPath = "C:/Users/Public"; // tempFilePath은 C드라이브 에러 발생해서 직접 대입으로 처리
} else {
folderPath = "/home/tomcat/temp/";
}
File file = new File(folderPath+"/"+filename+".xlsx");
// tmp 경로에 다운로드
FileOutputStream fileOut = new FileOutputStream(file);
wb.write(fileOut);
if(fileOut != null) {
fileOut.close();
}
if(wb != null) {
wb.close();
}
// 3초후 파일삭제
Timer m = new Timer();
TimerTask task = new TimerTask() { // 익명객체로 구현해야한다.
@Override
public void run() {
if( file.exists() ){
file.delete();
}
}
};
m.schedule(task,3000); //3초 뒤에 타이머작동
|
cs |
3. 윈도우 다운로드 기능 구현
- Javascript에서는 다운로드 폴더에서 다운 가능
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
|
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
var downloadFileName = '엑셀파일_'+dateTimeStr+'.xlsx'; //파일명
const uuid = uuidv4();
$.ajax({
type : "POST",
url : "/excelDownload.do",
data: {"fileName" : uuid},
contentType: 'application/x-www-form-urlencoded',
dataType : "json",
success : function(data) {
if(data.resultCode=="S"){
let link = document.createElement("a");
link.setAttribute("href", "/Public/"+uuid+".xlsx");
link.setAttribute("download", downloadFileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
alert("다운로드 폴더에 저장되었습니다.");
} else {
alert("엑셀 다운로드 중 오류가 발생하였습니다. 잠시후 다시 시도해주세요.");
}
},
error:function(request, status, error){
console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
alert("엑셀 다운로드 중 오류가 발생하였습니다. 잠시후 다시 시도해주세요.");
}
});
|
cs |
231006 (엑셀) 파일 다운로드할때 윈도우 다운로드 경로 가져오기
※ 쓰면 안되는 이유 : 로컬 PC 기준이기 때문에 개발서버나 다른 PC에서 접근하면 사용자 안맞아서 처리안됨
1
2
|
String home = System.getProperty("user.home");
File file = new File(home+"/Downloads/" + fileName);
|
cs |
출처 : https://stackoverflow.com/questions/30416365/general-path-to-downloads-folder
728x90
반응형
'웹개발 > Java & Jsp' 카테고리의 다른 글
쿠키 셋팅 및 가져오기 (0) | 2023.10.23 |
---|---|
[Java] SFTP 파일업로드/다운로드 (0) | 2023.10.11 |
[Jsp] jstl 작년 날짜 구하기 (0) | 2023.09.29 |
[Java] 파일업로드 최대사이즈가 10mb 넘어서 에러나는 경우 해결방법 (0) | 2023.09.11 |
[Jsp] JSTL로 List 특정 문자로 분리하기 (split) (0) | 2023.08.03 |
Comments