# Класс HttpSoft\ServerRequest\UploadedFileCreator
Хелпер для создания HttpSoft\Message\UploadedFile.
use HttpSoft\Message\Stream;
use HttpSoft\ServerRequest\UploadedFileCreator;
// Из существующего файла:
$uploadedFile = UploadedFileCreator::create('/tmp/phpN3FmFr', 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
// Из экземпляра `Psr\Http\Message\StreamInstance`:
$stream = new Stream('/tmp/phpN3FmFr', 'wb+');
$uploadedFile = UploadedFileCreator::create($stream, 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
// Из существующего ресурса:
$resource = fopen('path/to/file', 'wb+');
$uploadedFile = UploadedFileCreator::create($resource, 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
// Из элемента `$_FILES`:
$uploadedFile = UploadedFileFactory::createFromArray([
'name' => 'file.txt',
'type' => 'text/plain',
'tmp_name' => '/tmp/phpN3FmFr',
'error' => UPLOAD_ERR_OK,
'size' => 1024,
]);
// Создать несколько из суперглобального массива `$_FILES`:
$uploadedFiles = UploadedFileCreator::createFromGlobals($_FILES);
# Публичные методы
# create
Создает новый экземпляр HttpSoft\Message\UploadedFile.
/**
* @param StreamInterface|string|resource $streamOrFile
* @param int $size
* @param int $error
* @param string|null $clientFilename
* @param string|null $clientMediaType
* @return UploadedFileInterface
*/
public static function create(
$streamOrFile,
int $size,
int $error,
string $clientFilename = null,
string $clientMediaType = null
): UploadedFileInterface;
# createFromArray
Создает новый экземпляр HttpSoft\Message\UploadedFile из массива.
public static function createFromArray(array $file): UploadedFileInterface;
Создает экземпляр Psr\Http\Message\UploadedFileInterface
из одномерного массива $file
. Структура массива должна быть такой же, как и элемент в глобальном массиве $_FILES
.
// Пример структуры массива:
[
'name' => 'filename.jpg', // необязательный
'type' => 'image/jpeg', // необязательный
'tmp_name' => '/tmp/php/php6hst32',
'error' => 0, // UPLOAD_ERR_OK
'size' => 98174,
];
# createFromGlobals
Нормализует структуру дерева загружаемых файлов и преобразует каждое значение многомерного массива $files
в экземпляр Psr\Http\Message\UploadedFileInterface.
public static function createFromGlobals(array $files = []): array;
Метод использует рекурсию, поэтому массив $files
может быть любого уровня вложенности.
Все имена ключей в массиве $files
будут сохранены.
Структура массива должна быть такой же, как и у глобального массива
$_FILES
.
Если указанно невалидное значение спецификации файла, будет брошено исключение \InvalidArgumentException
.
use HttpSoft\ServerRequest\UploadedFileCreator;
// Пример #1
print_r($_FILES);
/*
[
'file' => [
'name' => 'file.txt',
'type' => 'text/plain',
'tmp_name' => '/tmp/phpN3FmFr',
'error' => UPLOAD_ERR_OK,
'size' => 1024,
],
];
*/
print_r(UploadedFileCreator::createFromGlobals($_FILES));
/*
[
'file' => `HttpSoft\Message\UploadedFile Object`,
];
*/
// Пример #2
/*
[
'file_1' => [
'name' => 'file.txt',
'type' => 'text/plain',
'tmp_name' => '/tmp/phpN3FmFr',
'error' => UPLOAD_ERR_OK,
'size' => 1024,
],
'file_2' => [
'name' => 'image.png',
'type' => 'image/png',
'tmp_name' => '/tmp/phpLs7DaJ',
'error' => UPLOAD_ERR_OK,
'size' => 98760,
],
];
*/
print_r(UploadedFileCreator::createFromGlobals($_FILES));
/*
[
'file_1' => `HttpSoft\Message\UploadedFile Object`,
'file_2' => `HttpSoft\Message\UploadedFile Object`,
];
*/
// Пример #3
print_r($_FILES);
/*
[
'files' => [
'name' => [
'file_1' => 'file.txt',
'file_2' => 'image.png',
],
'type' => [
'file_1' => 'text/plain',
'file_2' => 'image/png',
],
'tmp_name' => [
'file_1' => '/tmp/phpN3FmFr',
'file_2' => '/tmp/phpLs7DaJ',
],
'error' => [
'file_1' => 0,
'file_2' => 0,
],
'size' => [
'file_1' => 1024,
'file_2' => 98174,
],
],
];
*/
print_r(UploadedFileCreator::createFromGlobals($_FILES));
/*
[
'files' => [
'file_1' => `HttpSoft\Message\UploadedFile Object`,
'file_2' => `HttpSoft\Message\UploadedFile Object`,
],
];
*/
// Пример #4
/*
[
'files' => [
'name' => [
'data' => [
'nested' => [
'file_1' => 'file.txt',
'file_2' => 'image.png',
],
],
],
'type' => [
'data' => [
'nested' => [
'file_1' => 'text/plain',
'file_2' => 'image/png',
],
],
],
'tmp_name' => [
'data' => [
'nested' => [
'file_1' => '/tmp/phpN3FmFr',
'file_2' => '/tmp/phpLs7DaJ',
],
],
],
'error' => [
'data' => [
'nested' => [
'file_1' => UPLOAD_ERR_OK,
'file_2' => UPLOAD_ERR_OK,
],
],
],
'size' => [
'data' => [
'nested' => [
'file_1' => 1024,
'file_2' => 98174,
],
],
],
],
];
*/
print_r(UploadedFileCreator::createFromGlobals($_FILES));
/*
[
'files' => [
'data' => [
'nested' => [
'file_1' => `HttpSoft\Message\UploadedFile Object`,
'file_2' => `HttpSoft\Message\UploadedFile Object`,
],
],
],
];
*/
Подробнее о структуре загружаемых файлов смотрите здесь.