Метод storeAs
Метод storeAs класса WithFileUploads предназначен
для сохранения загруженного через Livewire файла
в файловую систему Laravel с указанием конкретного имени.
В отличие от метода store, который генерирует
уникальное имя автоматически, storeAs
позволяет задать нужное имя файла.
Метод принимает три параметра: путь для сохранения,
имя файла и необязательный параметр диска
(по умолчанию используется диск 'public').
Возвращает экземпляр класса IlluminateHttpUploadedFile
или путь к сохранённому файлу.
Синтаксис
$file->storeAs($path, $name, $disk);
Пример
Давайте создадим компонент для загрузки аватара и сохраним его с именем 'avatar.jpg':
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithFileUploads;
class UploadAvatar extends Component
{
use WithFileUploads;
public $avatar;
public $path;
public function save()
{
if ($this->avatar) {
$this->path = $this->avatar
->storeAs('avatars', 'avatar.jpg', 'public');
}
}
public function render()
{
return view('livewire.upload-avatar');
}
}
?>
<form wire:submit.prevent="save">
<input type="file" wire:model="avatar">
<button type="submit">Upload</button>
</form>
@if ($path)
<p>File saved: {{ $path }}</p>
@endif
Результат выполнения кода:
"avatars/avatar.jpg"
Файл будет сохранён в директории
storage/app/public/avatars/avatar.jpg.
Пример
Давайте сохраним файл с динамическим именем, используя имя пользователя и расширение:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithFileUploads;
class UploadDocument extends Component
{
use WithFileUploads;
public $document;
public $username = 'john_doe';
public $result;
public function save()
{
if ($this->document) {
$extension = $this->document
->getClientOriginalExtension();
$name = $this->username . '.' . $extension;
$this->result = $this->document
->storeAs('documents', $name, 'public');
}
}
public function render()
{
return view('livewire.upload-document');
}
}
?>
<form wire:submit.prevent="save">
<input type="file" wire:model="document">
<button type="submit">Upload document</button>
</form>
@if ($result)
<p>Document: {{ $result }}</p>
@endif
Результат выполнения кода при загрузке PDF-файла:
"documents/john_doe.pdf"
Пример
Давайте сохраним файл на другой диск,
например на S3 (предварительно настроенный
в файле config/filesystems.php):
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithFileUploads;
class UploadToS3 extends Component
{
use WithFileUploads;
public $file;
public $path;
public function save()
{
if ($this->file) {
$this->path = $this->file
->storeAs('uploads', 'backup.dat', 's3');
}
}
public function render()
{
return view('livewire.upload-to-s3');
}
}
?>
<form wire:submit.prevent="save">
<input type="file" wire:model="file">
<button type="submit">Upload to S3</button>
</form>
@if ($path)
<p>Saved: {{ $path }}</p>
@endif
Результат выполнения кода:
"uploads/backup.dat"
Смотрите также
-
метод
store,
который сохраняет файл с автоматическим именем -
метод
storePublicly,
который сохраняет файл с публичным доступом -
трейт
WithFileUploads,
который подключает функционал загрузки файлов -
директиву
rule-file,
которая валидирует загружаемый файл