써먹는 웹개발

[Java&Js] 윈도우 다운로드 경로에 (엑셀) 파일 다운로드 순서 본문

웹개발/Java & Jsp

[Java&Js] 윈도우 다운로드 경로에 (엑셀) 파일 다운로드 순서

kmhan 2023. 10. 6. 12:53


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
반응형


Comments