@@ -13,6 +13,7 @@ public function __invoke(callable $handler)
13
13
{
14
14
return function (ServerRequestInterface $ request , array $ options ) use ($ handler ){
15
15
$ contentType = $ request ->getHeader ('Content-Type ' )[0 ] ?? 'plain/text ' ;
16
+
16
17
if (!preg_match ('#^multipart/form-data; boundary=(.*)# ' ,$ contentType ,$ matches )){
17
18
return $ handler ($ request ,$ options );
18
19
}
@@ -27,7 +28,6 @@ public function __invoke(callable $handler)
27
28
28
29
$ elements = [ ... $ files , ... $ fields ];
29
30
30
-
31
31
$ multiStream = new MultipartStream ($ elements ,$ boundary );
32
32
$ request = $ request ->withBody ($ multiStream );
33
33
@@ -38,57 +38,75 @@ public function __invoke(callable $handler)
38
38
39
39
40
40
protected function files (array $ files , $ fileName = '' , $ elements = []) {
41
+
41
42
foreach ($ files as $ name => $ file ){
42
- if (empty ($ fileName )){
43
- $ fileName .= $ name ;
44
- } else {
45
- $ fileName .= '[ ' . $ name . '] ' ;
46
- }
47
43
48
44
if (is_array ($ file )) {
49
- $ elements = $ this -> files ( $ file , $ fileName , $ elements );
50
- }
45
+ foreach ( $ file as $ key => $ value ) {
46
+ $ fileName .= $ name . ' [ ' . $ key . ' ] ' ;
51
47
52
- /** @var UploadedFile $file */
48
+ $ elements [] = $ this ->makeFileElements ($ fileName , $ value );
49
+ $ fileName = '' ;
50
+ continue ;
53
51
54
- if ($ file instanceof UploadedFileInterface) {
55
- $ elements [] = [
56
- 'name ' => $ fileName ,
57
- 'contents ' => $ file ->getStream (),
58
- 'filename ' => $ file ->getClientFilename (),
59
- ];
60
-
61
- $ fileName = '' ;
52
+ }
53
+ } else {
54
+ $ fileName .= $ name ;
55
+ $ elements [] = $ this ->makeFileElements ($ fileName , $ file );
62
56
}
63
57
58
+
59
+ $ fileName = '' ;
60
+
64
61
}
65
62
66
63
return $ elements ;
67
64
}
68
65
66
+ protected function makeFileElements (string $ fileName , UploadedFileInterface $ file ): array
67
+ {
68
+ return [
69
+ 'name ' => $ fileName ,
70
+ 'contents ' => $ file ->getStream (),
71
+ 'filename ' => $ file ->getClientFilename (),
72
+ 'headers ' => [
73
+ 'Content-Type ' => 'image/jpg '
74
+ ]
75
+ ];
76
+ }
77
+
69
78
protected function postFields (array $ postFields , $ fieldName = '' , $ elements = []) {
70
79
foreach ($ postFields as $ name => $ postField ){
71
- if (empty ($ fieldName )){
72
- $ fieldName .= $ name ;
73
- } else {
74
- $ fieldName .= '[ ' . $ name . '] ' ;
75
- }
76
-
77
80
if (is_array ($ postField )) {
78
- $ elements = $ this ->postFields ($ postField , $ fieldName , $ elements );
81
+ $ elements = $ this ->makeArrayPostFields ($ postField , $ name , $ elements );
82
+ }else {
83
+ $ elements [] = $ this ->makePostFieldsElement ($ name , $ postField );
79
84
}
85
+ }
80
86
81
- if (is_string ($ postField )) {
82
- $ elements [] = [
83
- 'name ' => $ fieldName ,
84
- 'contents ' => $ postField ,
85
- ];
87
+ return $ elements ;
88
+ }
86
89
87
- $ fieldName = '' ;
90
+ protected function makeArrayPostFields (array $ postFields , string $ fieldName , array $ elements ): array
91
+ {
92
+ foreach ($ postFields as $ key => $ value ){
93
+ $ name = $ fieldName . '[ ' . $ key . '] ' ;
94
+ if (is_string ($ value )){
95
+ $ elements [] = $ this ->makePostFieldsElement ($ name , $ value );
96
+ }else {
97
+ $ elements = $ this ->makeArrayPostFields ($ value , $ name , $ elements );
88
98
}
99
+ $ name = '' ;
89
100
}
90
-
91
101
return $ elements ;
92
102
}
93
103
104
+ protected function makePostFieldsElement (string $ name , string $ content ): array
105
+ {
106
+ return [
107
+ 'name ' => $ name ,
108
+ 'contents ' => $ content
109
+ ];
110
+ }
111
+
94
112
}
0 commit comments