Метод storeAs
Метод storeAs применяется к объекту загруженного файла
класса UploadedFile и сохраняет файл в указанную директорию
с заданным именем. Первым параметром передаётся путь к директории
сохранения относительно корня диска, вторым - имя файла, третьим
(необязательным) - название диска, на котором нужно сохранить файл.
Если диск не указан, используется диск по умолчанию.
Синтаксис
<?php
$uploadedFile->storeAs($directory, $filename, $disk);
?>
Пример
Давайте сохраним загруженный файл в директорию 'avatars'
с именем 'user_avatar.jpg' на диске по умолчанию:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function updateAvatar(Request $request, $id)
{
$user = User::find($id);
if ($request->hasFile('avatar')) {
$path = $request->file('avatar')->storeAs('avatars', 'user_avatar.jpg');
$user->avatar_path = $path;
$user->save();
echo "Avatar uploaded successfully";
} else {
echo "No avatar file found";
}
}
}
?>
Результат выполнения кода:
"Avatar uploaded successfully"
Пример
Давайте сохраним загруженный файл в директорию 'documents'
с уникальным именем, сгенерированным на основе оригинального
имени файла:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DocumentController extends Controller
{
public function uploadDocument(Request $request)
{
if ($request->hasFile('document')) {
$file = $request->file('document');
$originalName = $file->getClientOriginalName();
$timestamp = time();
$newFilename = $timestamp . '_' . $originalName;
$path = $file->storeAs('documents', $newFilename);
echo "Document saved at: " . $path;
} else {
echo "No document file found";
}
}
}
?>
Результат выполнения кода:
"Document saved at: documents/1648562345_report.pdf"
Пример
Давайте сохраним загруженный файл на диске 'public'
в директорию 'photos' с именем 'profile.jpg':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function uploadPhoto(Request $request)
{
if ($request->hasFile('photo')) {
$path = $request->file('photo')->storeAs(
'photos',
'profile.jpg',
'public'
);
echo "Photo saved on public disk: " . $path;
} else {
echo "No photo file found";
}
}
}
?>
Результат выполнения кода:
"Photo saved on public disk: photos/profile.jpg"
Пример
Давайте сохраним загруженный файл с проверкой его расширения и обработкой ошибок:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function uploadFile(Request $request)
{
try {
$file = $request->file('file');
if (!$file->isValid()) {
echo "Invalid file upload";
return;
}
$extension = $file->getClientOriginalExtension();
$allowedExtensions = ['jpg', 'png', 'pdf', 'docx'];
if (!in_array($extension, $allowedExtensions)) {
echo "File extension not allowed";
return;
}
$path = $file->storeAs(
'uploads',
'file_' . time() . '.' . $extension
);
echo "File uploaded successfully: " . $path;
} catch (\Exception $e) {
echo "Upload failed: " . $e->getMessage();
}
}
}
?>
Результат выполнения кода:
"File uploaded successfully: uploads/file_1648562345.pdf"
Смотрите также
-
метод
store,
который сохраняет файл с автоматическим именем -
метод
storePublicly,
который сохраняет файл с публичным доступом -
метод
putFileAs,
который сохраняет файл через фасад Storage -
метод
getClientOriginalName,
который возвращает оригинальное имя файла