Керування HTTP-стрімами у Laravel традиційно вимагало кількох кроків та перетворень, особливо під час завантаження чи передачі файлів. Проте новий метод resource()
значно спрощує цей процес, дозволяючи виконувати складні операції з потоками за допомогою одного виклику методу.
Цей метод особливо корисний для завантаження файлів з зовнішніх джерел і їх зберігання у системі зберігання вашого додатка, уникаючи необхідності створювати тимчасові файли або виконувати складні перетворення потоків.
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
// Старий підхід вимагав кількох перетворень
$response = Http::get($url);
Storage::put('file.pdf', StreamWrapper::getResource(
$response->toPsrResponse()->getBody()
));
// Новий спрощений підхід
Storage::put('file.pdf', Http::get($url)->resource());
Розглянемо практичний приклад сервісу обробки документів:
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
use App\Exceptions\DocumentProcessingException;
class DocumentProcessor
{
public function processRemoteDocument(string $documentUrl, string $reference)
{
try {
$response = Http::timeout(30)->get($documentUrl);
if (!$response->successful()) {
throw new DocumentProcessingException(
"Не вдалося отримати документ: {$response->status()}"
);
}
// Зберегти оригінальний документ
$originalPath = "documents/{$reference}/original.pdf";
Storage::put($originalPath, $response->resource());
// Створити резервну копію
Storage::disk('backup')->writeStream(
$originalPath,
Storage::readStream($originalPath)
);
return [
'reference' => $reference,
'size' => Storage::size($originalPath),
'path' => $originalPath
];
} catch (Exception $e) {
Log::error('Обробка документа не вдалася', [
'url' => $documentUrl,
'reference' => $reference,
'error' => $e->getMessage()
]);
throw $e;
}
}
}
Метод resource()
спрощує обробку потоків у додатках Laravel, роблячи операції з файлами простішими та зменшуючи складність вашого коду