Skip to content

Commit 3e2587b

Browse files
committed
FileUpload::__construct() accepts path
1 parent e34cf05 commit 3e2587b

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

src/Http/FileUpload.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,16 @@ final class FileUpload
4242
private readonly int $error;
4343

4444

45-
public function __construct(?array $value)
45+
public function __construct(array|string|null $value)
4646
{
47-
foreach (['name', 'size', 'tmp_name', 'error'] as $key) {
48-
if (!isset($value[$key]) || !is_scalar($value[$key])) {
49-
$value = [];
50-
break;
51-
}
47+
if (is_string($value)) {
48+
$value = [
49+
'name' => basename($value),
50+
'full_path' => $value,
51+
'size' => filesize($value),
52+
'tmp_name' => $value,
53+
'error' => UPLOAD_ERR_OK,
54+
];
5255
}
5356

5457
$this->name = $value['name'] ?? '';

tests/Http/FileUpload.basic.phpt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,22 @@ test('', function () {
8585
Assert::null($upload->getSuggestedExtension());
8686
Assert::same('', (string) $upload);
8787
});
88+
89+
90+
test('', function () {
91+
$upload = new FileUpload($file = __DIR__ . '/files/file.txt');
92+
93+
Assert::same('file.txt', $upload->getName());
94+
Assert::same('file.txt', $upload->getUntrustedName());
95+
Assert::same('file.txt', $upload->getSanitizedName());
96+
Assert::same($file, $upload->getUntrustedFullPath());
97+
Assert::same(filesize($file), $upload->getSize());
98+
Assert::same($file, $upload->getTemporaryFile());
99+
Assert::same($file, (string) $upload);
100+
Assert::same(0, $upload->getError());
101+
Assert::true($upload->isOk());
102+
Assert::true($upload->hasFile());
103+
Assert::false($upload->isImage());
104+
Assert::null($upload->getSuggestedExtension());
105+
Assert::same(file_get_contents($file), $upload->getContents());
106+
});

0 commit comments

Comments
 (0)