# Класс HttpSoft\Message\UploadedFile

Абстракция для удобного управления загружаемыми файлами, реализует Psr\Http\Message\UploadedFileInterface.

Исходный код на GitHub.

use HttpSoft\Message\Stream;
use HttpSoft\Message\UploadedFile;

$uploadedFile = new UploadedFile('file.txt', 1024, UPLOAD_ERR_OK);
$uploadedFile->getClientFilename(); // null
$uploadedFile->getClientMediaType(); // null
$uploadedFile->getError(); // 0
$uploadedFile->getSize(); // 1024

$uploadedFile = new UploadedFile('file.txt', 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
$uploadedFile->getClientFilename(); // 'file.txt'
$uploadedFile->getClientMediaType(); // 'text/plain'
$uploadedFile->getError(); // 0
$uploadedFile->getSize(); // 1024

$uploadedFile->getStream()->getContents(); // Content
$uploadedFile->moveTo('new/path/to/file.txt');
file_get_contents('new/path/to/file.txt'); // Content

// Create from resource:
$resource = fopen('path/to/file', 'wb+');
$uploadedFile = new UploadedFile($resource, 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');

// Create from `StreamInterface` instance:
$stream = new Stream($resource);
$uploadedFile = new UploadedFile($stream, 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');

# Публичные методы

Оригинальное подробное описание методов смотрите в Psr\Http\Message\UploadedFileInterface.

/**
 * @param StreamInterface|string|resource $streamOrFile
 * @param int $size
 * @param int $error
 * @param string|null $clientFilename
 * @param string|null $clientMediaType
 */
public function __construct(
    $streamOrFile,
    int $size,
    int $error,
    string $clientFilename = null,
    string $clientMediaType = null
);

# moveTo

Перемещает загруженный файл в новое место. Должен быть вызван только один раз.

/**
 * @param string $targetPath
 */
public function moveTo($targetPath): void;

Этот метод гарантированно работает как в среде SAPI, так и в среде отличной от SAPI.

Если указанно невалидное значение $targetPath, будет брошено исключение \InvalidArgumentException.

При любой ошибке во время операции перемещения или при повторных вызовах метода будет брошено исключение \RuntimeException.

use HttpSoft\Message\UploadedFile;

$uploadedFile = new UploadedFile('path/to/file.txt', 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
$uploadedFile->getStream()->getMetadata('uri'); // 'path/to/file.txt'
$uploadedFile->moveTo('new/path/to/new.txt');
$uploadedFile->getSize(); // 1024
$uploadedFile->getError(); // 0
$uploadedFile->getClientFilename(); // 'file.txt'
$uploadedFile->getClientMediaType(); // 'text/plain'

$uploadedFile = new UploadedFile('path/to/file.txt', 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
$uploadedFile->moveTo('target/path/directory/is/not/writeable'); // throws InvalidArgumentException
$uploadedFile->moveTo('target/path/does/not/exist'); // throws InvalidArgumentException

$uploadedFile = new UploadedFile('path/to/file.txt', 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain');
$uploadedFile->moveTo('new/path/to/new.txt'); // Ok
$uploadedFile->moveTo('new/path/to/new.txt'); // throws RuntimeException

# getStream

Возвращает экземпляр потока, представляющий загруженный файл. Должен быть вызван перед вызовом метода moveTo().

public function getStream(): StreamInterface;

Методы Psr\Http\Message\StreamInterface реализованы в HttpSoft\Message\StreamTrait.

Если метод moveTo() был вызван ранее или в тех случаях, когда поток недоступен или не может быть создан, будет брошено исключение \RuntimeException.

# getSize

Возвращает размер файла в байтах или null, если он неизвестен.

public function getSize(): ?int;

Аналогично ключу size файла в глобальном массиве $_FILES.

# getError

Возвращает ошибку, связанную с загруженным файлом.

public function getError(): int;

Возвращает значение одной из констант PHP UPLOAD_ERR_XXX.

Если файл был успешно загружен, этот метод должен вернуть UPLOAD_ERR_OK (0).

Аналогично ключу error файла в глобальном массиве $_FILES.

# getClientFilename

Возвращает имя файла, отправленное клиентом или null, если оно не было передано.

public function getClientFilename(): ?string;

Аналогично ключу name файла в глобальном массиве $_FILES.

# getClientMediaType

Возвращает медиа тип файла, отправленный клиентом или null, если он не был передан.

public function getClientMediaType(): ?string;

Аналогично ключу type файла в глобальном массиве $_FILES.