Метод storePublicly
Метод storePublicly применяется к объекту UploadedFile,
который представляет загруженный через форму файл.
Он сохраняет файл в публичное хранилище, делая его доступным
по прямой ссылке. Первым параметром передаётся путь в хранилище,
вторым - имя диска (необязательно). Если диск не указан,
используется диск по умолчанию из настроек.
Синтаксис
<?php
$path = $uploadedFile->storePublicly($path, $disk);
?>
Пример
Давайте сохраним загруженный файл в директорию 'avatars'
на публичном диске:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function updateAvatar(Request $request)
{
$user = User::find(1);
if ($request->hasFile('avatar')) {
$file = $request->file('avatar');
$path = $file->storePublicly('avatars', 'public');
$user->avatar_path = $path;
$user->save();
echo "File saved: " . $path;
}
}
}
?>
Результат выполнения кода:
"File saved: avatars/abc123def456.jpg"
Пример
Сохраним файл с автоматически сгенерированным именем в корень публичного хранилища. Имя файла формируется на основе содержимого и хеша, что гарантирует уникальность:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function upload(Request $request)
{
$file = $request->file('document');
$path = $file->storePublicly('documents');
echo "Document uploaded to: " . $path;
}
}
?>
Результат выполнения кода:
"Document uploaded to: documents/xyz789abc123.pdf"
Пример
Метод storePublicly автоматически устанавливает публичную
видимость для сохранённого файла. Это позволяет обращаться к нему
через публичный URL без дополнительной аутентификации.
Используем метод url для получения прямой ссылки:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function showPublicFile(Request $request)
{
$file = $request->file('image');
$path = $file->storePublicly('gallery', 'public');
$url = Storage::disk('public')->url($path);
echo "File URL: " . $url;
}
}
?>
Результат выполнения кода:
"File URL: http://example.com/storage/gallery/def456ghi789.png"