Метод putFile
Метод putFile применяется к фасаду Storage и предназначен для сохранения загруженных файлов в файловую систему. Первым параметром передаётся путь к директории, вторым - объект загруженного файла (экземпляр UploadedFile). Третьим параметром можно передать опции в виде массива. Метод возвращает путь к сохранённому файлу относительно корня диска.
В отличие от метода put, который требует указания полного имени файла, putFile автоматически генерирует уникальное имя для сохраняемого файла, что предотвращает конфликты имён. Имя генерируется на основе MD5-хеша содержимого файла и его оригинального расширения.
По умолчанию метод сохраняет файлы в приватный режим доступа. Для публичного доступа можно использовать метод putFilePublicly или передать опцию 'visibility' => 'public' в третьем параметре.
Синтаксис
<?php
use Illuminate\Support\Facades\Storage;
Storage::putFile($path, $file, $options);
?>
Пример
Давайте сохраним загруженный файл в директорию 'avatars':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class UserController extends Controller
{
public function uploadAvatar(Request $request)
{
$file = $request->file('avatar');
$path = Storage::putFile('avatars', $file);
echo $path;
}
}
?>
Результат выполнения кода при загрузке файла 'photo.jpg':
"avatars/o5wFhG0EJTcxMsHd0l4G6dyb6Vfhe4dDuJnmCjHg.jpg"
Пример
Давайте сохраним файл с указанием публичной видимости:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function uploadPublicFile(Request $request)
{
$file = $request->file('document');
$path = Storage::putFile('documents', $file, ['visibility' => 'public']);
echo $path;
}
}
?>
Результат выполнения кода:
"documents/6j7KfgtY5Ux9TqzfGR3KBs0ySVrqT9uZxghX8pKH.pdf"
Пример
Давайте используем метод putFile с указанием конкретного диска:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class MediaController extends Controller
{
public function uploadToPublic(Request $request)
{
$file = $request->file('image');
$path = Storage::disk('public')->putFile('images', $file);
echo $path;
}
}
?>
Результат выполнения кода:
"images/Kd4mZfX9P6C1t7VpE8c3WlQ0nJxR5yA2uFgH3bD8.png"