回答編集履歴
2
zipOutStream.close(); の追加
test
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
参考にさせていただいた内容をもとに、以下のように実装しました。
|
2
2
|
|
3
3
|
※パラメータの inputStream は MultipartFile から作成したもので、zip ファイルです。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
バイト配列の取得位置が try-with-resources ではまだ ZipOutputStream を close していない場所だったので、ret = baos.toByteArray(); の前に、明示的に zipOutStream.close(); を入れました。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
これで、7-zipの場合の解凍時のペイロードのメッセージも無くなり、また、Windowsエクスプローラでのダブルクリックでも解凍できるようになりました。
|
4
12
|
|
5
13
|
|
6
14
|
|
@@ -10,7 +18,7 @@
|
|
10
18
|
|
11
19
|
|
12
20
|
|
13
|
-
byte[] ret = new byte[10
|
21
|
+
byte[] ret = new byte[1048476];
|
14
22
|
|
15
23
|
|
16
24
|
|
@@ -108,6 +116,8 @@
|
|
108
116
|
|
109
117
|
}
|
110
118
|
|
119
|
+
zipOutStream.close(); //追加 2020.03.05
|
120
|
+
|
111
121
|
ret = baos.toByteArray();
|
112
122
|
|
113
123
|
} catch (Exception e) {
|
1
最終的な実装は try-with-resources 文の記述に変更しました。
test
CHANGED
@@ -6,21 +6,11 @@
|
|
6
6
|
|
7
7
|
```
|
8
8
|
|
9
|
-
|
9
|
+
public byte[] sampleZip(InputStream inputStream) {
|
10
10
|
|
11
11
|
|
12
12
|
|
13
13
|
byte[] ret = new byte[1024];
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
ZipInputStream zipInStream = new ZipInputStream(new BufferedInputStream(inputStream), Charset.forName("SJIS"));
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
22
|
-
|
23
|
-
ZipOutputStream zipOutStream = new ZipOutputStream(baos);
|
24
14
|
|
25
15
|
|
26
16
|
|
@@ -30,7 +20,13 @@
|
|
30
20
|
|
31
21
|
|
32
22
|
|
23
|
+
try (ZipInputStream zipInStream = new ZipInputStream(new BufferedInputStream(inputStream),
|
24
|
+
|
33
|
-
tr
|
25
|
+
Charset.forName("SJIS"));
|
26
|
+
|
27
|
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
28
|
+
|
29
|
+
ZipOutputStream zipOutStream = new ZipOutputStream(baos);) {
|
34
30
|
|
35
31
|
while ((zipEntry = zipInStream.getNextEntry()) != null) {
|
36
32
|
|
@@ -84,7 +80,7 @@
|
|
84
80
|
|
85
81
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
86
82
|
|
87
|
-
|
83
|
+
|
88
84
|
|
89
85
|
workbook = addSheet(new ByteArrayInputStream(fileBin)); // addSheet:独自の関数
|
90
86
|
|
@@ -112,15 +108,9 @@
|
|
112
108
|
|
113
109
|
}
|
114
110
|
|
115
|
-
zipInStream.close();
|
116
|
-
|
117
|
-
zipOutStream.close();
|
118
|
-
|
119
111
|
ret = baos.toByteArray();
|
120
112
|
|
121
|
-
} catch (
|
113
|
+
} catch (Exception e) {
|
122
|
-
|
123
|
-
// TODO 自動生成された catch ブロック
|
124
114
|
|
125
115
|
ret = null;
|
126
116
|
|