Отправка файлов (FileResponse)
Imhotep предоставляет класс Imhotep\Http\FileResponse для отправки файлов с поддержкой HTTP range-запросов, автоматической установки MIME-типов и управления кэшированием.
Базовая отправка файла
Для отправки файла пользователю используйте метод file() глобальной фабрики ответов:
return response()->file('/path/to/file.pdf');
PHP
Файл будет отображён в браузере (inline), а не скачан.
Скачивание файла
Чтобы принудительно скачать файл, используйте метод download():
return response()->download('/path/to/file.pdf');
PHP
Скачивание с другим именем
return response()->download('/path/to/document.pdf', 'report-2024.pdf');
PHP
Скачивание с пользовательскими заголовками
return response()->download('/path/to/file.pdf', 'document.pdf', [
'X-Custom-Header' => 'Value'
]);
PHP
Создание FileResponse вручную
Для полного контроля создайте экземпляр FileResponse напрямую:
use Imhotep\Http\FileResponse;
return new FileResponse(
file: '/path/to/file.pdf',
status: 200,
headers: ['X-Custom' => 'Value'],
public: true, // Публичное или приватное кэширование
disposition: null, // 'attachment' для скачивания
autoEtag: true, // Автоматическая генерация ETag
autoLastModified: true // Автоматическая установка Last-Modified
);
PHP
Управление кэшированием
Установка Etag
$response = response()->file('/path/to/file.pdf');
$response->setEtag(md5_file('/path/to/file.pdf'));
return $response;
PHP
Установка Last-Modified
use DateTimeImmutable;
$response = response()->file('/path/to/file.pdf');
$response->setLastModified(
DateTimeImmutable::createFromFormat('U', filemtime('/path/to/file.pdf'))
);
return $response;
PHP
Публичное и приватное кэширование
// Публичное кэширование (по умолчанию)
$response = response()->file('/path/to/file.pdf');
$response->setPublicCache();
// Приватное кэширование
$response->setPrivateCache();
PHP
Range-запросы (Partial Content)
FileResponse автоматически поддерживает HTTP Range-запросы для докачки файлов:
// Клиент может запросить: Range: bytes=0-1023
return response()->file('/path/to/large-file.zip');
PHP
Сервер автоматически:
- Вернёт статус 206 Partial Content
- Установит заголовки
Content-RangeиContent-Length - Отправит только запрошенную часть файла
Удаление файла после отправки
Для временных файлов можно автоматически удалить файл после отправки:
return response()
->download('/tmp/report-123.pdf')
->deleteFileAfterSend();
PHP