Метод writeStream
Метод writeStream применяется к экземпляру диска
фасада Storage и позволяет записать содержимое
файла из ресурса потока (например, из открытого
файла или PHP-потока) в указанное место файловой
system. Первым параметром передаётся путь к файлу
относительно корня диска, вторым - ресурс потока
(stream resource). Третий параметр - опциональный
массив опций, например, для указания видимости.
Метод возвращает true при успешной записи
или false в случае ошибки.
Синтаксис
<?php
use Illuminate\Support\Facades\Storage;
Storage::disk($disk)->writeStream($path, $resource, $options);
?>
Пример
Давайте запишем содержимое локального файла в хранилище с помощью потока:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function store()
{
$sourcePath = '/tmp/source.txt';
$destPath = 'uploads/destination.txt';
$sourceStream = fopen($sourcePath, 'r');
$res = Storage::disk('local')->writeStream($destPath, $sourceStream);
fclose($sourceStream);
if ($res) {
echo "File successfully written";
} else {
echo "Failed to write file";
}
}
}
?>
Результат выполнения кода:
"File successfully written"
Пример
Давайте запишем данные из PHP-потока в файл с указанием публичной видимости:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function storePublic()
{
$data = "This is a test content";
$stream = fopen('php://memory', 'r+');
fwrite($stream, $data);
rewind($stream);
$res = Storage::disk('public')->writeStream(
'public/test.txt',
$stream,
['visibility' => 'public']
);
fclose($stream);
if ($res) {
echo "Public file successfully written";
} else {
echo "Failed to write public file";
}
}
}
?>
Результат выполнения кода:
"Public file successfully written"
Пример
Давайте запишем большой файл по частям с использованием потока:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function storeLarge()
{
$url = 'https://example.com/large-file.zip';
$remoteStream = fopen($url, 'r');
if ($remoteStream === false) {
echo "Failed to open remote file";
return;
}
$res = Storage::disk('local')->writeStream(
'large-file.zip',
$remoteStream
);
fclose($remoteStream);
if ($res) {
echo "Large file successfully written";
} else {
echo "Failed to write large file";
}
}
}
?>
Результат выполнения кода:
"Large file successfully written"
Смотрите также
-
метод
readStream,
который читает файл как поток -
метод
put,
который записывает файл из строки -
метод
putFile,
который сохраняет загруженный файл -
метод
setVisibility,
который устанавливает видимость файла