Skip to content

Commit c671747

Browse files
committed
fix(http): convert Ripple file format to UploadedFile objects
1 parent 9fe8624 commit c671747

2 files changed

Lines changed: 80 additions & 2 deletions

File tree

src/HttpWorker.php

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,17 @@
3131
use Ripple\Stream\Exception\ConnectionException;
3232
use Ripple\Worker;
3333
use Symfony\Component\HttpFoundation\BinaryFileResponse;
34+
use Symfony\Component\HttpFoundation\File\UploadedFile;
3435
use Throwable;
3536

3637
use function cli_set_process_title;
3738
use function fopen;
3839
use function stream_context_create;
40+
use function file_exists;
41+
use function is_array;
42+
43+
use const UPLOAD_ERR_NO_FILE;
44+
use const UPLOAD_ERR_OK;
3945

4046
/**
4147
* @Author cclilshy
@@ -140,7 +146,7 @@ protected function onRequest(Request $request): void
140146
$request->POST,
141147
[],
142148
$request->COOKIE,
143-
$request->FILES,
149+
$this->parseFiles($request->FILES),
144150
$request->SERVER,
145151
$request->CONTENT,
146152
);
@@ -204,6 +210,39 @@ protected function onRequest(Request $request): void
204210
}
205211
}
206212

213+
/*** @return array<string, array<UploadedFile>> */
214+
protected function parseFiles(array $files): array
215+
{
216+
if (empty($files)) {
217+
return [];
218+
}
219+
220+
$parsed = [];
221+
foreach ($files as $name => $items) {
222+
if (!is_array($items)) {
223+
continue;
224+
}
225+
226+
if (isset($items[0]['path']) && is_array($items[0])) {
227+
$parsed[$name] = [];
228+
foreach ($items as $item) {
229+
$path = $item['path'];
230+
$parsed[$name][] = new UploadedFile(
231+
$path,
232+
$item['fileName'] ?? '',
233+
$item['contentType'] ?? 'application/octet-stream',
234+
file_exists($path) ? UPLOAD_ERR_OK : UPLOAD_ERR_NO_FILE,
235+
true
236+
);
237+
}
238+
} else {
239+
$parsed[$name] = $items;
240+
}
241+
}
242+
243+
return $parsed;
244+
}
245+
207246
/**
208247
* @param Closure $handler
209248
* @return void

src/Octane/RippleClient.php

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,15 @@
2121
use Ripple\Runtime\Support\Stdin;
2222
use Ripple\Stream\Exception\ConnectionException;
2323
use Symfony\Component\HttpFoundation\BinaryFileResponse;
24+
use Symfony\Component\HttpFoundation\File\UploadedFile;
2425
use Throwable;
2526

2627
use function fopen;
28+
use function file_exists;
29+
use function is_array;
30+
31+
use const UPLOAD_ERR_NO_FILE;
32+
use const UPLOAD_ERR_OK;
2733

2834
/**
2935
*
@@ -42,7 +48,7 @@ public function marshalRequest(RequestContext $context): array
4248
$rippleHttpRequest->POST,
4349
[],
4450
$rippleHttpRequest->COOKIE,
45-
$rippleHttpRequest->FILES,
51+
$this->parseFiles($rippleHttpRequest->FILES),
4652
$rippleHttpRequest->SERVER,
4753
$rippleHttpRequest->CONTENT,
4854
);
@@ -98,4 +104,37 @@ public function error(Throwable $e, Application $app, Request $request, RequestC
98104
{
99105
Stdin::println($e->getMessage());
100106
}
107+
108+
/*** @return array<string, array<UploadedFile>> */
109+
protected function parseFiles(array $files): array
110+
{
111+
if (empty($files)) {
112+
return [];
113+
}
114+
115+
$parsed = [];
116+
foreach ($files as $name => $items) {
117+
if (!is_array($items)) {
118+
continue;
119+
}
120+
121+
if (isset($items[0]['path']) && is_array($items[0])) {
122+
$parsed[$name] = [];
123+
foreach ($items as $item) {
124+
$path = $item['path'];
125+
$parsed[$name][] = new UploadedFile(
126+
$path,
127+
$item['fileName'] ?? '',
128+
$item['contentType'] ?? 'application/octet-stream',
129+
file_exists($path) ? UPLOAD_ERR_OK : UPLOAD_ERR_NO_FILE,
130+
true
131+
);
132+
}
133+
} else {
134+
$parsed[$name] = $items;
135+
}
136+
}
137+
138+
return $parsed;
139+
}
101140
}

0 commit comments

Comments
 (0)