質問編集履歴

1

ファイル名の文字化けは解消しました。response.setHeader()の記述に誤りがあったようです。

2020/04/09 02:53

投稿

jaxxaxa
jaxxaxa

スコア10

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
- ブラウザでダウンロード処理を行った際、ファイル名が「_________.xls」という表示になってしまいます。(ファイルの中身は正しく書き込みされておりました。)
8
+
10
-
11
- ファイル名を日本語で表示して尚且つ中身も正しく書き込みがなされている処理を実現したいため、ご教授いただきたいです。
12
-
13
-
14
-
15
- また、とりあえずファイル名だけでも出したいので固定で「勤務実績_たろう君.xls」と記入したのですが、「たろう君」のところを動的に入力するような記述も実装したいです。
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
- String fileName = "勤務実績_たろう君.xls";
92
-
93
- File file = new File("C:/pleiades/pleiades/workspace/Kitaro/src/main/webapp/resources/output/" + fileName);
94
-
95
- String savePath = file.getAbsolutePath();
96
-
97
-
98
-
99
- InputStream is = null;
100
-
101
- byte[] fileContent = null;
102
-
103
- try {
104
-
105
- is = new FileInputStream(savePath);
106
-
107
- fileContent = IOUtils.toByteArray(is);
108
-
109
- } catch (FileNotFoundException e) {
110
-
111
- e.printStackTrace();
112
-
113
- } catch (IOException e) {
114
-
115
- e.printStackTrace();
116
-
117
- } finally {
118
-
119
- IOUtils.closeQuietly(is);
120
-
121
- }
122
-
123
-
124
-
125
- //ファイルの書き込み
126
-
127
- response.setContentType("application/octet-stream");
128
-
129
- response.setHeader("Content-Disposition", "attachment; filename=" + fileName );
130
-
131
- response.setContentLength(fileContent.length);
132
-
133
-
134
-
135
- OutputStream os = null;
136
-
137
-
138
-
139
- os = response.getOutputStream();
140
-
141
- os.write(fileContent);
142
-
143
- os.flush();
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
- return new FileSystemResource("/pleiades/pleiades/workspace/Kitaro/src/main/webapp/resources/output/勤務実績_たろう君.xls");
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