-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanagefiles.jsp
146 lines (116 loc) · 4.22 KB
/
managefiles.jsp
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
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*, java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>관리자 화면</title>
</head>
<body>
<%
String rootFolder = this.getServletContext().getInitParameter("StorageRoot");
File userFolder = new File(this.getServletContext().getRealPath(rootFolder));
// File userFolder = new File(this.getServletContext().getRealPath(rootFolder), "[" + userEmail + "]");
String[] files = userFolder.list();
%>
<%
// 1. checkbox로 선택된 유저들을 삭제하는 요청
// 우선 checkbox로다가 삭제할 유저의 문자열들을 받아온다.
String[] toDelete = request.getParameterValues("checked");
if (toDelete != null) {
for (String s : toDelete) {
// 기존 디렉토리(파일) 삭제
new File(userFolder, s).delete();
// MS-DOS 파일도 삭제하도록 ..
String s2 = s.replaceAll("\\[|\\]", "");
File s2file = new File(userFolder, s2);
if (s2file.exists()) {
s2file.delete();
}
}
}
%>
<div style='width:400px;' align='center'>
<strong><ins>User lists</ins></strong><br><br>
</div>
<form action='managefiles.jsp' method='post'>
<fieldset style='width:400px'>
<legend>Users Lists</legend>
<%
// 유저들의 목록을 보여준다. 아래에 파일들도 보여주는 폼 작성.
List<String> l = new ArrayList<>();
for (String s : files) {
if (s.indexOf("[") != -1) {
l.add(s);
}
}
if (files == null || files.length == 0)
out.println("<strong>There are no users.</strong><br>");
else {
for (String userName: l) {
out.println(String.format("<input type='checkbox' id='%s' name='checked' value='%s'>", userName, userName));
out.println(String.format("<label for='%s'>%s</label>", userName, userName));
out.println("<br>");
}
}
%>
<hr>
<div style='width:400px;' align='right'>
<input type='submit' value='Delete'>
<input type='reset' value='Reset'>
</div>
</fieldset><br>
</form>
<hr>
<div style='width:400px;' align='center'>
<strong><ins>All Uploaded Files</ins></strong><br><br>
</div>
<form action='managefiles.jsp' method='post'>
<fieldset style='width:400px'>
<legend>uploaded files</legend>
<%
// 모든 유저 파일들의 폴더를 돌면서, File[] 배열에 파일을 하나씩 저장한 후, 전체 파일을 최정적으로 보여줌.
// 배열이 아니라 해시맵으로 파일 이름과 경로를 모두 매핑해서 가지고 있다가, 나중에 전체적으로 볼 때 해당 파일 이름만 가지고도 바로 경로를 알 수 있고, 만약에 경로값을 얻어서 null이 아니라면 지우면 된다..
// 해시맵이 이렇게나 간편한 것이었다니..
Map<String, String> filePathMap = new HashMap<>();
for (String user : l) {
File userDirectory = new File(userFolder, user);
File[] userFiles = userDirectory.listFiles();
if (userFiles != null) {
for (File userFile : userFiles) {
filePathMap.put(userFile.getName(), userFile.getAbsolutePath());
}
}
}
List<String> fileNames = new ArrayList<>(filePathMap.keySet());
if (fileNames.isEmpty())
out.println("<strong>There are no users.</strong><br>");
else {
for (String fileName : fileNames) {
out.println(String.format("<input type='checkbox' id='%s' name='filechecked' value='%s'>", fileName, fileName));
out.println(String.format("<label for='%s'>%s</label>", fileName, fileName));
out.println("<br>");
}
}
// 파일을 삭제하는 로직. (유저 x)
String[] fileDelete = request.getParameterValues("filechecked");
if (fileDelete != null) {
for (String fileName : fileDelete) {
String filePath = filePathMap.get(fileName);
if (filePath != null) {
new File(filePath).delete();
}
}
}
%>
<hr>
<div style='width:400px;' align='right'>
<input type='submit' value='Delete'>
<input type='reset' value='Reset'>
</div>
</fieldset><br>
</form>
<br>
</body>
</html>