File tree Expand file tree Collapse file tree
okhttps/src/main/java/com/ejlchina/okhttps Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .ejlchina .okhttps ;
2+
3+ import java .net .URLDecoder ;
4+ import java .nio .charset .StandardCharsets ;
5+
6+ /**
7+ * 下载文件名解析器
8+ */
9+ public class FileNameResolver {
10+
11+
12+ public String resolveFileName (HttpResult result ) {
13+ String fileName = result .getHeader ("Content-Disposition" );
14+ // 通过 Content-Disposition 获取文件名,这点跟服务器有关,需要灵活变通
15+ if (fileName == null || fileName .length () < 1 ) {
16+ fileName = result .getTask ().getUrl ();
17+ fileName = fileName .substring (fileName .lastIndexOf ("/" ) + 1 );
18+ } else {
19+ fileName = URLDecoder .decode (fileName .substring (
20+ fileName .indexOf ("filename=" ) + 9 ), StandardCharsets .UTF_8 );
21+ // 有些文件名会被包含在""里面,所以要去掉,不然无法读取文件后缀
22+ fileName = fileName .replaceAll ("\" " , "" );
23+ }
24+ return fileName ;
25+ }
26+
27+ }
Original file line number Diff line number Diff line change @@ -288,6 +288,16 @@ interface Builder {
288288
289289 String bodyType ();
290290
291+ /**
292+ * @since v3.5.0
293+ * 设置下载文件名解析器
294+ * @param resolver 解析器
295+ * @return Builder
296+ */
297+ Builder fileNameResolver (FileNameResolver resolver );
298+
299+ FileNameResolver fileNameResolver ();
300+
291301 /**
292302 * 构建 HTTP 实例
293303 * @return HTTP
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ public abstract class AbstractHttpClient implements HTTP {
2626 // 默认的请求体类型
2727 final String bodyType ;
2828
29+ final FileNameResolver fileNameResolver ;
2930
3031 public AbstractHttpClient (HTTP .Builder builder ) {
3132 this .baseUrl = builder .baseUrl ();
@@ -36,6 +37,7 @@ public AbstractHttpClient(HTTP.Builder builder) {
3637 this .charset = builder .charset ();
3738 this .bodyType = builder .bodyType ();
3839 this .tagTasks = new LinkedList <>();
40+ this .fileNameResolver = builder .fileNameResolver ();
3941 }
4042
4143
@@ -302,4 +304,8 @@ public String bodyType() {
302304 return bodyType ;
303305 }
304306
307+ public FileNameResolver fileNameResolver () {
308+ return fileNameResolver ;
309+ }
310+
305311}
Original file line number Diff line number Diff line change @@ -46,6 +46,7 @@ public class OkHttpBuilderImpl implements HTTP.Builder {
4646
4747 private String bodyType = OkHttps .FORM ;
4848
49+ private FileNameResolver fileNameResolver ;
4950
5051 public OkHttpBuilderImpl () {
5152 mediaTypes = new HashMap <>();
@@ -72,6 +73,7 @@ public OkHttpBuilderImpl() {
7273 preprocessors = new ArrayList <>();
7374 msgConvertors = new ArrayList <>();
7475 configs = new ArrayList <>();
76+ fileNameResolver = new FileNameResolver ();
7577 }
7678
7779 public OkHttpBuilderImpl (OkHttpClientWrapper hc ) {
@@ -95,6 +97,7 @@ public OkHttpBuilderImpl(OkHttpClientWrapper hc) {
9597 configs = new ArrayList <>();
9698 bodyType = hc .bodyType ();
9799 charset = hc .charset ();
100+ fileNameResolver = hc .fileNameResolver ();
98101 }
99102
100103
@@ -310,4 +313,15 @@ public String bodyType() {
310313 return bodyType ;
311314 }
312315
316+ @ Override
317+ public HTTP .Builder fileNameResolver (FileNameResolver resolver ) {
318+ fileNameResolver = resolver ;
319+ return this ;
320+ }
321+
322+ @ Override
323+ public FileNameResolver fileNameResolver () {
324+ return fileNameResolver ;
325+ }
326+
313327}
You can’t perform that action at this time.
0 commit comments