| Revision | 244 (tree) |
|---|---|
| Time | 2016-04-24 21:04:14 |
| Author | t_nakayama1971 |
(empty log message)
| @@ -1,15 +1,20 @@ | ||
| 1 | 1 | package project.web; |
| 2 | 2 | |
| 3 | 3 | import java.nio.charset.StandardCharsets; |
| 4 | +import java.util.ArrayList; | |
| 5 | +import java.util.List; | |
| 4 | 6 | import java.util.Objects; |
| 7 | +import java.util.Optional; | |
| 8 | +import java.util.function.Function; | |
| 5 | 9 | |
| 6 | 10 | import javax.servlet.http.HttpServletRequest; |
| 7 | 11 | import javax.servlet.http.HttpServletResponse; |
| 8 | 12 | |
| 13 | +import core.util.MojiUtil; | |
| 14 | +import core.util.bean.Pair; | |
| 9 | 15 | import online.model.UniModel; |
| 10 | 16 | import online.struts.action.RestAction; |
| 11 | 17 | import online.view.ViewUtil; |
| 12 | -import core.util.MojiUtil; | |
| 13 | 18 | |
| 14 | 19 | /** |
| 15 | 20 | * ダウンロードアクション親 |
| @@ -73,19 +78,26 @@ | ||
| 73 | 78 | * @return ダウンロード名 |
| 74 | 79 | */ |
| 75 | 80 | protected final String toDownloadName(final String name, final HttpServletRequest request) { |
| 76 | - if (request.getHeader("User-Agent").contains("Safari")) { | |
| 77 | - return ""; | |
| 78 | - } | |
| 79 | 81 | |
| 80 | - if (request.getHeader("User-Agent").contains("MSIE") | |
| 81 | - || request.getHeader("User-Agent").contains("Trident") | |
| 82 | - || request.getHeader("User-Agent").contains("Chrome")) { | |
| 83 | - String nm = MojiUtil.correctGarbled(name, MojiUtil.CHARSET_W31J); | |
| 82 | + final Function<String, String> sjis = s -> { | |
| 83 | + String nm = MojiUtil.correctGarbled(s, MojiUtil.CHARSET_W31J); | |
| 84 | 84 | return "filename=" |
| 85 | 85 | + new String(nm.getBytes(MojiUtil.CHARSET_W31J), StandardCharsets.ISO_8859_1); |
| 86 | - } | |
| 86 | + }; | |
| 87 | 87 | |
| 88 | - return "filename*=" + StandardCharsets.UTF_8.name() + "''" | |
| 89 | - + ViewUtil.encode(name, StandardCharsets.UTF_8.name()); | |
| 88 | + final Function<String, String> utf8 = s -> { | |
| 89 | + return "filename*=" + StandardCharsets.UTF_8.name() + "''" | |
| 90 | + + ViewUtil.encode(s, StandardCharsets.UTF_8.name()); | |
| 91 | + }; | |
| 92 | + | |
| 93 | + List<Pair<String, Function<String, String>>> list = new ArrayList<>(); | |
| 94 | + list.add(new Pair<>(".*Safari.*", (String s) -> "")); | |
| 95 | + list.add(new Pair<>(".*[MSIE|Trident|Chrome].*", sjis)); | |
| 96 | + | |
| 97 | + final String agent = request.getHeader("User-Agent"); | |
| 98 | + Optional<Pair<String, Function<String, String>>> opt = | |
| 99 | + list.stream().filter(p -> agent.matches(p.left())).findFirst(); | |
| 100 | + opt.orElse(new Pair<>(".*", utf8)); | |
| 101 | + return opt.get().right().apply(name); | |
| 90 | 102 | } |
| 91 | 103 | } |
| @@ -1,15 +1,20 @@ | ||
| 1 | 1 | package project.web; |
| 2 | 2 | |
| 3 | 3 | import java.nio.charset.StandardCharsets; |
| 4 | +import java.util.ArrayList; | |
| 5 | +import java.util.List; | |
| 4 | 6 | import java.util.Objects; |
| 7 | +import java.util.Optional; | |
| 8 | +import java.util.function.Function; | |
| 5 | 9 | |
| 6 | 10 | import javax.servlet.http.HttpServletRequest; |
| 7 | 11 | import javax.servlet.http.HttpServletResponse; |
| 8 | 12 | |
| 13 | +import core.util.MojiUtil; | |
| 14 | +import core.util.bean.Pair; | |
| 9 | 15 | import online.model.UniModel; |
| 10 | 16 | import online.struts.action.RestAction; |
| 11 | 17 | import online.view.ViewUtil; |
| 12 | -import core.util.MojiUtil; | |
| 13 | 18 | |
| 14 | 19 | /** |
| 15 | 20 | * ダウンロードアクション親 |
| @@ -73,19 +78,26 @@ | ||
| 73 | 78 | * @return ダウンロード名 |
| 74 | 79 | */ |
| 75 | 80 | protected final String toDownloadName(final String name, final HttpServletRequest request) { |
| 76 | - if (request.getHeader("User-Agent").contains("Safari")) { | |
| 77 | - return ""; | |
| 78 | - } | |
| 79 | 81 | |
| 80 | - if (request.getHeader("User-Agent").contains("MSIE") | |
| 81 | - || request.getHeader("User-Agent").contains("Trident") | |
| 82 | - || request.getHeader("User-Agent").contains("Chrome")) { | |
| 83 | - String nm = MojiUtil.correctGarbled(name, MojiUtil.CHARSET_W31J); | |
| 82 | + final Function<String, String> sjis = s -> { | |
| 83 | + String nm = MojiUtil.correctGarbled(s, MojiUtil.CHARSET_W31J); | |
| 84 | 84 | return "filename=" |
| 85 | 85 | + new String(nm.getBytes(MojiUtil.CHARSET_W31J), StandardCharsets.ISO_8859_1); |
| 86 | - } | |
| 86 | + }; | |
| 87 | 87 | |
| 88 | - return "filename*=" + StandardCharsets.UTF_8.name() + "''" | |
| 89 | - + ViewUtil.encode(name, StandardCharsets.UTF_8.name()); | |
| 88 | + final Function<String, String> utf8 = s -> { | |
| 89 | + return "filename*=" + StandardCharsets.UTF_8.name() + "''" | |
| 90 | + + ViewUtil.encode(s, StandardCharsets.UTF_8.name()); | |
| 91 | + }; | |
| 92 | + | |
| 93 | + List<Pair<String, Function<String, String>>> list = new ArrayList<>(); | |
| 94 | + list.add(new Pair<>(".*Safari.*", (String s) -> "")); | |
| 95 | + list.add(new Pair<>(".*[MSIE|Trident|Chrome].*", sjis)); | |
| 96 | + | |
| 97 | + final String agent = request.getHeader("User-Agent"); | |
| 98 | + Optional<Pair<String, Function<String, String>>> opt = | |
| 99 | + list.stream().filter(p -> agent.matches(p.left())).findFirst(); | |
| 100 | + opt.orElse(new Pair<>(".*", utf8)); | |
| 101 | + return opt.get().right().apply(name); | |
| 90 | 102 | } |
| 91 | 103 | } |