본문으로 바로가기

nexacro17에서 첨부파일 업로드 기능을 구현할 일이 생겨서 아래와 같은 소스로 적용 하였다.

 

첨부파일 명칭 같은경우 날짜타입으로 파일명을 바꿔서 중복되지 않도록 처리하였으며,

기존 첨부파일 사이즈 변경하는 소스를 이용하여 데이터 사이즈 표기법을 변경하였다.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page language="java"%>
<%@ page import="java.io.File"%>
<%@ page import="java.io.IOException"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.Enumeration"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
 
<%@ page import="javax.servlet.ServletException"%>
 
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
 
<%@ page import="com.nexacro17.xapi.data.DataSet"%>
<%@ page import="com.nexacro17.xapi.data.DataTypes"%>
<%@ page import="java.util.Random"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="java.util.Date"%>
 
<%
String chkType = request.getHeader("Content-Type");
 
if( chkType == null )
    return;
 
request.setCharacterEncoding("utf-8");
String contextRealPath = request.getSession().getServletContext().getRealPath("/");
String PATH = request.getParameter("PATH");
String savePath = contextRealPath + PATH;
System.out.println(">>>>>>>>>>>>>>>" + savePath);
int maxSize = 500 * 1024 * 1024// 최대 업로드 파일 크기 500MB(메가)로 제한
 
PlatformData resData = new PlatformData();
VariableList resVarList = resData.getVariableList();
String sMsg = " A ";
try {
    /*
        MultipartRequest 를 사용할 경우 파일 이름을 변경 하여 업로드 할 수 없다.
        이유는 multi 생성시 바로 업로드 도기때문이다.        
        그래서 업로드후에 파일명을 변경 하는 방법을 선택 하여야 한다.    
    */
    MultipartRequest multi = new MultipartRequest(request, savePath, maxSize, "utf-8"new DefaultFileRenamePolicy());
    Enumeration files = multi.getFileNames(); // 파일명 모두 얻기
    System.out.println("files:"+files);
    sMsg += "B ";
    DataSet ds = new DataSet("Dataset00");
    
    ds.addColumn(new ColumnHeader("fileName"DataTypes.STRING));
    ds.addColumn(new ColumnHeader("realFileName"DataTypes.STRING));
    ds.addColumn(new ColumnHeader("fileSize"DataTypes.STRING));
    ds.addColumn(new ColumnHeader("fileType"DataTypes.STRING));
    ds.addColumn(new ColumnHeader("filePath"DataTypes.STRING));
    
    ds.addColumn(new ColumnHeader("ErrCode"DataTypes.STRING));
    ds.addColumn(new ColumnHeader("ErrMsg",  DataTypes.STRING));
    
    sMsg += "C ";
 
    String fileName="";
 
    while (files.hasMoreElements()) {
        sMsg += "D ";
        String name = (String)files.nextElement();
        String rFileNm ="";
        
        fileName   += multi.getFilesystemName(name);
        
//         /*파일명 랜덤함수 */
//         Random random = new Random();        
//         for(int i=0; i<10; i++){
//             boolean select = random.nextBoolean();    //true : 숫자, false:알파벳
//             char make = ' ';
            
//             if(select){
//                 make = (char)(random.nextInt(10)+'0'); // 0~9    
//             }
//             else{
//                 make = (char)(random.nextInt('Z'-'A'+1) +'A'); //A~Z
//             }
//             rFileNm += make;
//         }
        
        String fileExtension = fileName.toLowerCase().substring(
 
                fileName.lastIndexOf("."+ 1, fileName.length());
        
        System.out.println("fileExtension " + fileExtension);
    
        /*rename 처리*/
        String now = new SimpleDateFormat("yyyyMMddHmsS").format(new Date());  //현재시간
        int i = -1;
              i = fileName.lastIndexOf("."); // 파일 확장자 위치 
              String realFileName = now + "_"+fileName;  //현재시간과 확장자 합치기
       
        File oldFile = new File(savePath +"\\" +fileName) ;
        File newFile = new File(savePath +"\\" + realFileName);
        
        System.out.println("oldFile:"+oldFile);        
        System.out.println("realFileName:"+realFileName);
        
        oldFile.renameTo(newFile); // 파일명 변경
 
        String type = multi.getContentType(name);
         
        int row = ds.newRow();
        ds.set(row, "fileName", fileName);  
        ds.set(row, "realFileName",  realFileName);
        ds.set(row, "fileType", type);
        ds.set(row, "filePath", savePath);  
        
        /*파일 사이즈*/
        Integer unit = 1024;
        
        long filesize = (long)newFile.length();
        String resultSize;
 
        if (filesize < unit){
            resultSize = String.format("(%d B)", filesize);
        }
        int exp = (int) (Math.log(filesize) / Math.log(unit));
        resultSize =  String.format("(%.0f %s)", filesize / Math.pow(unit, exp), "KMGTPE".charAt(exp-1));
        
        ds.set(row, "fileSize", resultSize );
        sMsg += row +" ";
        
    }
    resData.addDataSet(ds);
    resVarList.add("ErrorCode"200);
    resVarList.add("ErrorMsg", fileName);
catch (Exception e) {  
    resVarList.add("ErrorCode"-1);
    resVarList.add("ErrorMsg", sMsg + " " + e);
    System.out.println("Err:"+sMsg+"   :"+e);
}
 
HttpPlatformResponse res = new HttpPlatformResponse(response);
res.setData(resData);
res.sendData();
 
%>
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter