質問編集履歴
1
ファイル名の文字化けは解消しました。response.setHeader()の記述に誤りがあったようです。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Servletで生成したExcelファイルを
|
1
|
+
Servletで生成したExcelファイル名を動的に変更したい
|
test
CHANGED
@@ -4,15 +4,9 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
皆様のお力添えもあり、何とか出力することはできるようにな
|
7
|
+
皆様のお力添えもあり、何とか出力することはできるようになりました。
|
8
|
-
|
9
|
-
|
8
|
+
|
10
|
-
|
11
|
-
ファイル名を日本語で表示して尚且つ中身も正しく書き込みがなされている処理を実現したいため、ご教授いただきたいです。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
ファイル名だけでも出したいので固定で「勤務実績_たろう君.xls」と記入したのですが、「たろう君」のところを動的に入力するような記述も実装したいです。
|
16
10
|
|
17
11
|
ログインユーザー名によって「勤務実績_〇〇.xls」の〇〇の記述が変わるような感じです。
|
18
12
|
|
@@ -22,16 +16,6 @@
|
|
22
16
|
|
23
17
|
|
24
18
|
|
25
|
-
### やってみたこと
|
26
|
-
|
27
|
-
・ファイル名を変えたいので、ダウンロードさせるファイル名にURLEncoder#encodeでエンコードをするといった処理を実装してみました。
|
28
|
-
|
29
|
-
→結果的にファイル名は実現したい日本語でのファイル名が表示できたのですが、中身が閲覧できない形になりました。
|
30
|
-
|
31
|
-
(エラー:このファイルには、この操作を実行するように関連付けられたアプリがありません。アプリをインストールするか、または既にインストールされている場合は、既定のアプリの設定ページで関連付けを作成してください。)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
19
|
### 環境
|
36
20
|
|
37
21
|
・Java8
|
@@ -52,6 +36,46 @@
|
|
52
36
|
|
53
37
|
```java
|
54
38
|
|
39
|
+
try {
|
40
|
+
|
41
|
+
// monthを取得する
|
42
|
+
|
43
|
+
String value = request.getParameter("month");
|
44
|
+
|
45
|
+
YearMonth yearMonth;
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
// monthが実在する日付の場合
|
50
|
+
|
51
|
+
if (!InputCheck.checkDate(value, "yyyy-MM")) {
|
52
|
+
|
53
|
+
// monthが実在しない日付の場合、405エラーへリダイレクト
|
54
|
+
|
55
|
+
return "forward:/error/400";
|
56
|
+
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
// DBからユーザNo.取得
|
62
|
+
|
63
|
+
LoginInfoBean loginInfoBean = this.userInterface.getUserInfo(userId);
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
// ファイル名を取得
|
68
|
+
|
69
|
+
String name = loginInfoBean.getFamilyName() + loginInfoBean.getFirstName();
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
// monthをLocalDate型にする
|
74
|
+
|
75
|
+
yearMonth = InputCheck.toYearMonth(value, "yyyy-MM");
|
76
|
+
|
77
|
+
|
78
|
+
|
55
79
|
// Excelファイルのダウンロード開始
|
56
80
|
|
57
81
|
try (InputStream in = new FileInputStream(
|
@@ -68,8 +92,6 @@
|
|
68
92
|
|
69
93
|
|
70
94
|
|
71
|
-
|
72
|
-
|
73
95
|
// ユーザNo.・monthを年月日化した値でログイン情報(ユーザNo.・氏名)を取得する
|
74
96
|
|
75
97
|
Context context = new Context();
|
@@ -84,65 +106,65 @@
|
|
84
106
|
|
85
107
|
}
|
86
108
|
|
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
|
-
|
109
|
+
String CHARSET_UTF8 = "UTF-8";
|
110
|
+
|
111
|
+
// ダウンロードファイルの取得
|
112
|
+
|
113
|
+
String fileName = "作業実績_社員.xls";
|
114
|
+
|
115
|
+
File file = new File("C:/pleiades/pleiades/workspace/Kitaro/src/main/webapp/resources/output/" + fileName);
|
116
|
+
|
117
|
+
String savePath = file.getAbsolutePath();
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
InputStream is = null;
|
122
|
+
|
123
|
+
byte[] fileContent = null;
|
124
|
+
|
125
|
+
try {
|
126
|
+
|
127
|
+
is = new FileInputStream(savePath);
|
128
|
+
|
129
|
+
fileContent = IOUtils.toByteArray(is);
|
130
|
+
|
131
|
+
} catch (FileNotFoundException e) {
|
132
|
+
|
133
|
+
e.printStackTrace();
|
134
|
+
|
135
|
+
} catch (IOException e) {
|
136
|
+
|
137
|
+
e.printStackTrace();
|
138
|
+
|
139
|
+
} finally {
|
140
|
+
|
141
|
+
IOUtils.closeQuietly(is);
|
142
|
+
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
// ファイルの書き込み
|
148
|
+
|
149
|
+
response.setContentType("application/octet-stream");
|
150
|
+
|
151
|
+
response.setHeader("Content-Disposition",
|
152
|
+
|
153
|
+
"attachment; filename=" + URLEncoder.encode(fileName, CHARSET_UTF8));
|
154
|
+
|
155
|
+
response.setContentLength(fileContent.length);
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
OutputStream os = null;
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
os = response.getOutputStream();
|
164
|
+
|
165
|
+
os.write(fileContent);
|
166
|
+
|
167
|
+
os.flush();
|
146
168
|
|
147
169
|
|
148
170
|
|
@@ -172,11 +194,19 @@
|
|
172
194
|
|
173
195
|
}
|
174
196
|
|
197
|
+
|
198
|
+
|
175
|
-
public Resource handler_method(){
|
199
|
+
public Resource handler_method() {
|
200
|
+
|
176
|
-
|
201
|
+
return new FileSystemResource(
|
202
|
+
|
177
|
-
|
203
|
+
"/pleiades/pleiades/workspace/Kitaro/src/main/webapp/resources/output/作業実績_社員.xls");
|
204
|
+
|
205
|
+
|
206
|
+
|
178
|
-
|
207
|
+
}
|
208
|
+
|
179
|
-
|
209
|
+
}
|
180
210
|
|
181
211
|
|
182
212
|
|