Работа с загруженными файлами

Imhotep предоставляет удобные методы для работы с файлами, загруженными через формы.

Получение файлов

Получить файл по имени

$file = $request->file('photo');

// Или через динамическое свойство
$file = $request->photo;
PHP

Получить все файлы

$files = $request->files();
PHP

Проверка загрузки

Проверить наличие файла

if ($request->hasFile('photo')) {
    // Файл 'photo' был загружен
}

// Проверить несколько файлов
if ($request->hasFile(['photo', 'document'])) {
    // Оба файла были загружены
}
PHP

Валидация файлов

if ($request->file('photo')->isValid()) {
    // Файл загружен без ошибок
}
PHP

Сохранение файлов

Сохранить файл с автоматическим именем

// Сохранить в локальное хранилище
$path = $request->photo->store('images');

// Сохранить в облачное хранилище S3
$path = $request->photo->store('images', 's3');
PHP

Сохранить файл с указанным именем

// Локальное хранилище
$path = $request->photo->storeAs('images', 'profile.jpg');

// Облачное хранилище S3
$path = $request->photo->storeAs('images', 'profile.jpg', 's3');
PHP

Информация о файле

Класс Imhotep\Http\UploadedFile предоставляет много полезных методов:

$file = $request->file('photo');

// Имя оригинального файла
$originalName = $file->originalName();

// Расширение файла
$extension = $file->originalExtension();

// MIME-тип
$mimeType = $file->mimeType();
$originalMimeType = $file->originalMimeType(); // MIME-тип из запроса

// Размер файла в байтах
$size = $file->size();

// Путь к файлу
$path = $file->path();

// Проверить тип файла
if (str_starts_with($file->mimeType(), 'image/')) {
    // Это изображение
}
PHP

Пример полной обработки файла

public function uploadPhoto(Request $request)
{
    // Проверяем наличие файла
    if (!$request->hasFile('photo')) {
        return back()->withErrors('Файл не загружен');
    }

    // Получаем файл
    $file = $request->file('photo');

    // Проверяем валидность
    if (!$file->isValid()) {
        return back()->withErrors('Ошибка загрузки файла');
    }

    // Проверяем MIME-тип
    if (! str_starts_with($file->mimeType(), 'image/')) {
        return back()->withErrors('Файл должен быть изображением');
    }

    // Сохраняем файл
    $path = $file->store('profile-photos');

    // Возвращаем результат
    return back()->with('success', 'Фото загружено: ' . $path);
}
PHP

Конфигурация хранилища

Файлы сохраняются на диск, настроенный в config/filesystems.php как default.

Для работы с облачными хранилищами (S3, FTP и др.) настройте соответствующий диск в конфигурации.